From 1287b2782b8e8a1d2c7a3684ebf1327fc5647f51 Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Fri, 19 Jan 2018 11:34:48 +0100 Subject: Display a warning when composing unlisted toots with something looking like a hashtag This is a backport of b6af88192ff48372c5f6ed1321f21d99aaffcd3f to the glitch flavour. --- .../features/composer/hashtag_warning/index.js | 49 ++++++++++++++++++++++ .../flavours/glitch/features/composer/index.js | 4 ++ 2 files changed, 53 insertions(+) create mode 100644 app/javascript/flavours/glitch/features/composer/hashtag_warning/index.js (limited to 'app/javascript/flavours') diff --git a/app/javascript/flavours/glitch/features/composer/hashtag_warning/index.js b/app/javascript/flavours/glitch/features/composer/hashtag_warning/index.js new file mode 100644 index 000000000..716028e4c --- /dev/null +++ b/app/javascript/flavours/glitch/features/composer/hashtag_warning/index.js @@ -0,0 +1,49 @@ +import React from 'react'; +import Motion from 'flavours/glitch/util/optional_motion'; +import spring from 'react-motion/lib/spring'; +import { defineMessages, FormattedMessage } from 'react-intl'; + +// This is the spring used with our motion. +const motionSpring = spring(1, { damping: 35, stiffness: 400 }); + +// Messages. +const messages = defineMessages({ + disclaimer: { + defaultMessage: 'This toot won\'t be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.', + id: 'compose_form.hashtag_warning', + }, +}); + +// The component. +export default function ComposerHashtagWarning () { + return ( + + {({ opacity, scaleX, scaleY }) => ( +
+ +
+ )} +
+ ); +} + +ComposerHashtagWarning.propTypes = {}; diff --git a/app/javascript/flavours/glitch/features/composer/index.js b/app/javascript/flavours/glitch/features/composer/index.js index 29a2f4775..e50f3ec3f 100644 --- a/app/javascript/flavours/glitch/features/composer/index.js +++ b/app/javascript/flavours/glitch/features/composer/index.js @@ -3,6 +3,8 @@ import PropTypes from 'prop-types'; import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; +const APPROX_HASHTAG_RE = /(?:^|[^\/\)\w])#(\S+)/i; + // Actions. import { cancelReplyCompose, @@ -36,6 +38,7 @@ import ComposerSpoiler from './spoiler'; import ComposerTextarea from './textarea'; import ComposerUploadForm from './upload_form'; import ComposerWarning from './warning'; +import ComposerHashtagWarning from './hashtag_warning'; // Utils. import { countableText } from 'flavours/glitch/util/counter'; @@ -312,6 +315,7 @@ class Composer extends React.Component { text={spoilerText} /> {privacy === 'private' && amUnlocked ? : null} + {privacy !== 'public' && APPROX_HASHTAG_RE.test(text) ? : null} {replyContent ? (