You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

217 lines
9.0 KiB

  1. // Package imports
  2. import React from 'react';
  3. import PropTypes from 'prop-types';
  4. import ImmutablePropTypes from 'react-immutable-proptypes';
  5. import { defineMessages, FormattedMessage, injectIntl } from 'react-intl';
  6. // Our imports
  7. import LocalSettingsPageItem from './item';
  8. // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  9. const messages = defineMessages({
  10. layout_auto: { id: 'layout.auto', defaultMessage: 'Auto' },
  11. layout_desktop: { id: 'layout.desktop', defaultMessage: 'Desktop' },
  12. layout_mobile: { id: 'layout.single', defaultMessage: 'Mobile' },
  13. side_arm_none: { id: 'settings.side_arm.none', defaultMessage: 'None' },
  14. });
  15. @injectIntl
  16. export default class LocalSettingsPage extends React.PureComponent {
  17. static propTypes = {
  18. index : PropTypes.number,
  19. intl : PropTypes.object.isRequired,
  20. onChange : PropTypes.func.isRequired,
  21. settings : ImmutablePropTypes.map.isRequired,
  22. };
  23. pages = [
  24. ({ intl, onChange, settings }) => (
  25. <div className='glitch local-settings__page general'>
  26. <h1><FormattedMessage id='settings.general' defaultMessage='General' /></h1>
  27. <LocalSettingsPageItem
  28. settings={settings}
  29. item={['layout']}
  30. id='mastodon-settings--layout'
  31. options={[
  32. { value: 'auto', message: intl.formatMessage(messages.layout_auto) },
  33. { value: 'multiple', message: intl.formatMessage(messages.layout_desktop) },
  34. { value: 'single', message: intl.formatMessage(messages.layout_mobile) },
  35. ]}
  36. onChange={onChange}
  37. >
  38. <FormattedMessage id='settings.layout' defaultMessage='Layout:' />
  39. </LocalSettingsPageItem>
  40. <LocalSettingsPageItem
  41. settings={settings}
  42. item={['stretch']}
  43. id='mastodon-settings--stretch'
  44. onChange={onChange}
  45. >
  46. <FormattedMessage id='settings.wide_view' defaultMessage='Wide view (Desktop mode only)' />
  47. </LocalSettingsPageItem>
  48. <LocalSettingsPageItem
  49. settings={settings}
  50. item={['navbar_under']}
  51. id='mastodon-settings--navbar_under'
  52. onChange={onChange}
  53. >
  54. <FormattedMessage id='settings.navbar_under' defaultMessage='Navbar at the bottom (Mobile only)' />
  55. </LocalSettingsPageItem>
  56. <section>
  57. <h2><FormattedMessage id='settings.compose_box_opts' defaultMessage='Compose box options' /></h2>
  58. <LocalSettingsPageItem
  59. settings={settings}
  60. item={['side_arm']}
  61. id='mastodon-settings--side_arm'
  62. options={[
  63. { value: 'none', message: intl.formatMessage(messages.side_arm_none) },
  64. { value: 'direct', message: intl.formatMessage({ id: 'privacy.direct.short' }) },
  65. { value: 'private', message: intl.formatMessage({ id: 'privacy.private.short' }) },
  66. { value: 'unlisted', message: intl.formatMessage({ id: 'privacy.unlisted.short' }) },
  67. { value: 'public', message: intl.formatMessage({ id: 'privacy.public.short' }) },
  68. ]}
  69. onChange={onChange}
  70. >
  71. <FormattedMessage id='settings.side_arm' defaultMessage='Secondary toot button:' />
  72. </LocalSettingsPageItem>
  73. <LocalSettingsPageItem
  74. settings={settings}
  75. item={['side_arm_auto']}
  76. id='mastodon-settings--side_arm_auto'
  77. onChange={onChange}
  78. >
  79. <FormattedMessage id='settings.side_arm_auto' defaultMessage='Auto privacy for secondary toot button' />
  80. </LocalSettingsPageItem>
  81. </section>
  82. </div>
  83. ),
  84. ({ onChange, settings }) => (
  85. <div className='glitch local-settings__page collapsed'>
  86. <h1><FormattedMessage id='settings.collapsed_statuses' defaultMessage='Collapsed toots' /></h1>
  87. <LocalSettingsPageItem
  88. settings={settings}
  89. item={['collapsed', 'enabled']}
  90. id='mastodon-settings--collapsed-enabled'
  91. onChange={onChange}
  92. >
  93. <FormattedMessage id='settings.enable_collapsed' defaultMessage='Enable collapsed toots' />
  94. </LocalSettingsPageItem>
  95. <section>
  96. <h2><FormattedMessage id='settings.auto_collapse' defaultMessage='Automatic collapsing' /></h2>
  97. <LocalSettingsPageItem
  98. settings={settings}
  99. item={['collapsed', 'auto', 'all']}
  100. id='mastodon-settings--collapsed-auto-all'
  101. onChange={onChange}
  102. dependsOn={[['collapsed', 'enabled']]}
  103. >
  104. <FormattedMessage id='settings.auto_collapse_all' defaultMessage='Everything' />
  105. </LocalSettingsPageItem>
  106. <LocalSettingsPageItem
  107. settings={settings}
  108. item={['collapsed', 'auto', 'notifications']}
  109. id='mastodon-settings--collapsed-auto-notifications'
  110. onChange={onChange}
  111. dependsOn={[['collapsed', 'enabled']]}
  112. dependsOnNot={[['collapsed', 'auto', 'all']]}
  113. >
  114. <FormattedMessage id='settings.auto_collapse_notifications' defaultMessage='Notifications' />
  115. </LocalSettingsPageItem>
  116. <LocalSettingsPageItem
  117. settings={settings}
  118. item={['collapsed', 'auto', 'lengthy']}
  119. id='mastodon-settings--collapsed-auto-lengthy'
  120. onChange={onChange}
  121. dependsOn={[['collapsed', 'enabled']]}
  122. dependsOnNot={[['collapsed', 'auto', 'all']]}
  123. >
  124. <FormattedMessage id='settings.auto_collapse_lengthy' defaultMessage='Lengthy toots' />
  125. </LocalSettingsPageItem>
  126. <LocalSettingsPageItem
  127. settings={settings}
  128. item={['collapsed', 'auto', 'reblogs']}
  129. id='mastodon-settings--collapsed-auto-reblogs'
  130. onChange={onChange}
  131. dependsOn={[['collapsed', 'enabled']]}
  132. dependsOnNot={[['collapsed', 'auto', 'all']]}
  133. >
  134. <FormattedMessage id='settings.auto_collapse_reblogs' defaultMessage='Boosts' />
  135. </LocalSettingsPageItem>
  136. <LocalSettingsPageItem
  137. settings={settings}
  138. item={['collapsed', 'auto', 'replies']}
  139. id='mastodon-settings--collapsed-auto-replies'
  140. onChange={onChange}
  141. dependsOn={[['collapsed', 'enabled']]}
  142. dependsOnNot={[['collapsed', 'auto', 'all']]}
  143. >
  144. <FormattedMessage id='settings.auto_collapse_replies' defaultMessage='Replies' />
  145. </LocalSettingsPageItem>
  146. <LocalSettingsPageItem
  147. settings={settings}
  148. item={['collapsed', 'auto', 'media']}
  149. id='mastodon-settings--collapsed-auto-media'
  150. onChange={onChange}
  151. dependsOn={[['collapsed', 'enabled']]}
  152. dependsOnNot={[['collapsed', 'auto', 'all']]}
  153. >
  154. <FormattedMessage id='settings.auto_collapse_media' defaultMessage='Toots with media' />
  155. </LocalSettingsPageItem>
  156. </section>
  157. <section>
  158. <h2><FormattedMessage id='settings.image_backgrounds' defaultMessage='Image backgrounds' /></h2>
  159. <LocalSettingsPageItem
  160. settings={settings}
  161. item={['collapsed', 'backgrounds', 'user_backgrounds']}
  162. id='mastodon-settings--collapsed-user-backgrouns'
  163. onChange={onChange}
  164. dependsOn={[['collapsed', 'enabled']]}
  165. >
  166. <FormattedMessage id='settings.image_backgrounds_users' defaultMessage='Give collapsed toots an image background' />
  167. </LocalSettingsPageItem>
  168. <LocalSettingsPageItem
  169. settings={settings}
  170. item={['collapsed', 'backgrounds', 'preview_images']}
  171. id='mastodon-settings--collapsed-preview-images'
  172. onChange={onChange}
  173. dependsOn={[['collapsed', 'enabled']]}
  174. >
  175. <FormattedMessage id='settings.image_backgrounds_media' defaultMessage='Preview collapsed toot media' />
  176. </LocalSettingsPageItem>
  177. </section>
  178. </div>
  179. ),
  180. ({ onChange, settings }) => (
  181. <div className='glitch local-settings__page media'>
  182. <h1><FormattedMessage id='settings.media' defaultMessage='Media' /></h1>
  183. <LocalSettingsPageItem
  184. settings={settings}
  185. item={['media', 'letterbox']}
  186. id='mastodon-settings--media-letterbox'
  187. onChange={onChange}
  188. >
  189. <FormattedMessage id='settings.media_letterbox' defaultMessage='Letterbox media' />
  190. </LocalSettingsPageItem>
  191. <LocalSettingsPageItem
  192. settings={settings}
  193. item={['media', 'fullwidth']}
  194. id='mastodon-settings--media-fullwidth'
  195. onChange={onChange}
  196. >
  197. <FormattedMessage id='settings.media_fullwidth' defaultMessage='Full-width media previews' />
  198. </LocalSettingsPageItem>
  199. </div>
  200. ),
  201. ];
  202. render () {
  203. const { pages } = this;
  204. const { index, intl, onChange, settings } = this.props;
  205. const CurrentPage = pages[index] || pages[0];
  206. return <CurrentPage intl={intl} onChange={onChange} settings={settings} />;
  207. }
  208. }