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.

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