// Package imports
import React from 'react' ;
import PropTypes from 'prop-types' ;
import ImmutablePropTypes from 'react-immutable-proptypes' ;
import { defineMessages , FormattedMessage , injectIntl } from 'react-intl' ;
// Our imports
import LocalSettingsPageItem from './item' ;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
const messages = defineMessages ( {
layout _auto : { id : 'layout.auto' , defaultMessage : 'Auto' } ,
layout _desktop : { id : 'layout.desktop' , defaultMessage : 'Desktop' } ,
layout _mobile : { id : 'layout.single' , defaultMessage : 'Mobile' } ,
side _arm _none : { id : 'settings.side_arm.none' , defaultMessage : 'None' } ,
side _arm _keep : { id : 'settings.side_arm_reply_mode.keep' , defaultMessage : 'Keep secondary toot button to set privacy' } ,
side _arm _copy : { id : 'settings.side_arm_reply_mode.copy' , defaultMessage : 'Copy privacy setting of the toot being replied to' } ,
side _arm _restrict : { id : 'settings.side_arm_reply_mode.restrict' , defaultMessage : 'Restrict privacy setting to that of the toot being replied to' } ,
regexp : { id : 'settings.content_warnings.regexp' , defaultMessage : 'Regular expression' } ,
} ) ;
@ injectIntl
export default class LocalSettingsPage extends React . PureComponent {
static propTypes = {
index : PropTypes . number ,
intl : PropTypes . object . isRequired ,
onChange : PropTypes . func . isRequired ,
settings : ImmutablePropTypes . map . isRequired ,
} ;
pages = [
( { intl , onChange , settings } ) => (
< div className = 'glitch local-settings__page general' >
< h1 > < FormattedMessage id = 'settings.general' defaultMessage = 'General' / > < / h 1 >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'show_reply_count' ] }
id = 'mastodon-settings--reply-count'
onChange = { onChange }
>
< FormattedMessage id = 'settings.show_reply_counter' defaultMessage = 'Display an estimate of the reply count' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< section >
< h2 > < FormattedMessage id = 'settings.notifications_opts' defaultMessage = 'Notifications options' / > < / h 2 >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'notifications' , 'tab_badge' ] }
id = 'mastodon-settings--notifications-tab_badge'
onChange = { onChange }
>
< FormattedMessage id = 'settings.notifications.tab_badge' defaultMessage = "Display a badge for unread notifications if the notifications column isn't open" / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'notifications' , 'favicon_badge' ] }
id = 'mastodon-settings--notifications-favicon_badge'
onChange = { onChange }
>
< FormattedMessage id = 'settings.notifications.favicon_badge' defaultMessage = 'Display unread notifications count in the favicon' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< / s e c t i o n >
< section >
< h2 > < FormattedMessage id = 'settings.layout_opts' defaultMessage = 'Layout options' / > < / h 2 >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'layout' ] }
id = 'mastodon-settings--layout'
options = { [
{ value : 'auto' , message : intl . formatMessage ( messages . layout _auto ) } ,
{ value : 'multiple' , message : intl . formatMessage ( messages . layout _desktop ) } ,
{ value : 'single' , message : intl . formatMessage ( messages . layout _mobile ) } ,
] }
onChange = { onChange }
>
< FormattedMessage id = 'settings.layout' defaultMessage = 'Layout:' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'stretch' ] }
id = 'mastodon-settings--stretch'
onChange = { onChange }
>
< FormattedMessage id = 'settings.wide_view' defaultMessage = 'Wide view (Desktop mode only)' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'navbar_under' ] }
id = 'mastodon-settings--navbar_under'
onChange = { onChange }
>
< FormattedMessage id = 'settings.navbar_under' defaultMessage = 'Navbar at the bottom (Mobile only)' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< / s e c t i o n >
< / d i v >
) ,
( { intl , onChange , settings } ) => (
< div className = 'glitch local-settings_page compose_box_opts' >
< h1 > < FormattedMessage id = 'settings.compose_box_opts' defaultMessage = 'Compose box options' / > < / h 1 >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'always_show_spoilers_field' ] }
id = 'mastodon-settings--always_show_spoilers_field'
onChange = { onChange }
>
< FormattedMessage id = 'settings.always_show_spoilers_field' defaultMessage = 'Always enable the Content Warning field' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'confirm_missing_media_description' ] }
id = 'mastodon-settings--confirm_missing_media_description'
onChange = { onChange }
>
< FormattedMessage id = 'settings.confirm_missing_media_description' defaultMessage = 'Show confirmation dialog before sending toots lacking media descriptions' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'side_arm' ] }
id = 'mastodon-settings--side_arm'
options = { [
{ value : 'none' , message : intl . formatMessage ( messages . side _arm _none ) } ,
{ value : 'direct' , message : intl . formatMessage ( { id : 'privacy.direct.short' } ) } ,
{ value : 'private' , message : intl . formatMessage ( { id : 'privacy.private.short' } ) } ,
{ value : 'unlisted' , message : intl . formatMessage ( { id : 'privacy.unlisted.short' } ) } ,
{ value : 'public' , message : intl . formatMessage ( { id : 'privacy.public.short' } ) } ,
] }
onChange = { onChange }
>
< FormattedMessage id = 'settings.side_arm' defaultMessage = 'Secondary toot button:' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'side_arm_reply_mode' ] }
id = 'mastodon-settings--side_arm_reply_mode'
options = { [
{ value : 'keep' , message : intl . formatMessage ( messages . side _arm _keep ) } ,
{ value : 'copy' , message : intl . formatMessage ( messages . side _arm _copy ) } ,
{ value : 'restrict' , message : intl . formatMessage ( messages . side _arm _restrict ) } ,
] }
onChange = { onChange }
>
< FormattedMessage id = 'settings.side_arm_reply_mode' defaultMessage = 'When replying to a toot:' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< / d i v >
) ,
( { intl , onChange , settings } ) => (
< div className = 'glitch local-settings__page content_warnings' >
< h1 > < FormattedMessage id = 'settings.content_warnings' defaultMessage = 'Content warnings' / > < / h 1 >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'content_warnings' , 'auto_unfold' ] }
id = 'mastodon-settings--content_warnings-auto_unfold'
onChange = { onChange }
>
< FormattedMessage id = 'settings.enable_content_warnings_auto_unfold' defaultMessage = 'Automatically unfold content-warnings' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< 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 ) }
>
< FormattedMessage id = 'settings.content_warnings_filter' defaultMessage = 'Content warnings to not automatically unfold:' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< / d i v >
) ,
( { onChange , settings } ) => (
< div className = 'glitch local-settings__page collapsed' >
< h1 > < FormattedMessage id = 'settings.collapsed_statuses' defaultMessage = 'Collapsed toots' / > < / h 1 >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'collapsed' , 'enabled' ] }
id = 'mastodon-settings--collapsed-enabled'
onChange = { onChange }
>
< FormattedMessage id = 'settings.enable_collapsed' defaultMessage = 'Enable collapsed toots' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< section >
< h2 > < FormattedMessage id = 'settings.auto_collapse' defaultMessage = 'Automatic collapsing' / > < / h 2 >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'collapsed' , 'auto' , 'all' ] }
id = 'mastodon-settings--collapsed-auto-all'
onChange = { onChange }
dependsOn = { [ [ 'collapsed' , 'enabled' ] ] }
>
< FormattedMessage id = 'settings.auto_collapse_all' defaultMessage = 'Everything' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'collapsed' , 'auto' , 'notifications' ] }
id = 'mastodon-settings--collapsed-auto-notifications'
onChange = { onChange }
dependsOn = { [ [ 'collapsed' , 'enabled' ] ] }
dependsOnNot = { [ [ 'collapsed' , 'auto' , 'all' ] ] }
>
< FormattedMessage id = 'settings.auto_collapse_notifications' defaultMessage = 'Notifications' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'collapsed' , 'auto' , 'lengthy' ] }
id = 'mastodon-settings--collapsed-auto-lengthy'
onChange = { onChange }
dependsOn = { [ [ 'collapsed' , 'enabled' ] ] }
dependsOnNot = { [ [ 'collapsed' , 'auto' , 'all' ] ] }
>
< FormattedMessage id = 'settings.auto_collapse_lengthy' defaultMessage = 'Lengthy toots' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'collapsed' , 'auto' , 'reblogs' ] }
id = 'mastodon-settings--collapsed-auto-reblogs'
onChange = { onChange }
dependsOn = { [ [ 'collapsed' , 'enabled' ] ] }
dependsOnNot = { [ [ 'collapsed' , 'auto' , 'all' ] ] }
>
< FormattedMessage id = 'settings.auto_collapse_reblogs' defaultMessage = 'Boosts' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'collapsed' , 'auto' , 'replies' ] }
id = 'mastodon-settings--collapsed-auto-replies'
onChange = { onChange }
dependsOn = { [ [ 'collapsed' , 'enabled' ] ] }
dependsOnNot = { [ [ 'collapsed' , 'auto' , 'all' ] ] }
>
< FormattedMessage id = 'settings.auto_collapse_replies' defaultMessage = 'Replies' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'collapsed' , 'auto' , 'media' ] }
id = 'mastodon-settings--collapsed-auto-media'
onChange = { onChange }
dependsOn = { [ [ 'collapsed' , 'enabled' ] ] }
dependsOnNot = { [ [ 'collapsed' , 'auto' , 'all' ] ] }
>
< FormattedMessage id = 'settings.auto_collapse_media' defaultMessage = 'Toots with media' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< / s e c t i o n >
< section >
< h2 > < FormattedMessage id = 'settings.image_backgrounds' defaultMessage = 'Image backgrounds' / > < / h 2 >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'collapsed' , 'backgrounds' , 'user_backgrounds' ] }
id = 'mastodon-settings--collapsed-user-backgrouns'
onChange = { onChange }
dependsOn = { [ [ 'collapsed' , 'enabled' ] ] }
>
< FormattedMessage id = 'settings.image_backgrounds_users' defaultMessage = 'Give collapsed toots an image background' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'collapsed' , 'backgrounds' , 'preview_images' ] }
id = 'mastodon-settings--collapsed-preview-images'
onChange = { onChange }
dependsOn = { [ [ 'collapsed' , 'enabled' ] ] }
>
< FormattedMessage id = 'settings.image_backgrounds_media' defaultMessage = 'Preview collapsed toot media' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< / s e c t i o n >
< / d i v >
) ,
( { onChange , settings } ) => (
< div className = 'glitch local-settings__page media' >
< h1 > < FormattedMessage id = 'settings.media' defaultMessage = 'Media' / > < / h 1 >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'media' , 'letterbox' ] }
id = 'mastodon-settings--media-letterbox'
onChange = { onChange }
>
< FormattedMessage id = 'settings.media_letterbox' defaultMessage = 'Letterbox media' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< LocalSettingsPageItem
settings = { settings }
item = { [ 'media' , 'fullwidth' ] }
id = 'mastodon-settings--media-fullwidth'
onChange = { onChange }
>
< FormattedMessage id = 'settings.media_fullwidth' defaultMessage = 'Full-width media previews' / >
< / L o c a l S e t t i n g s P a g e I t e m >
< / d i v >
) ,
] ;
render ( ) {
const { pages } = this ;
const { index , intl , onChange , settings } = this . props ;
const CurrentPage = pages [ index ] || pages [ 0 ] ;
return < CurrentPage intl = { intl } onChange = { onChange } settings = { settings } / > ;
}
}