diff --git a/app/soapbox/components/status.js b/app/soapbox/components/status.js index 7b0d328df..1ff0b1e03 100644 --- a/app/soapbox/components/status.js +++ b/app/soapbox/components/status.js @@ -94,7 +94,6 @@ class Status extends ImmutablePureComponent { group: ImmutablePropTypes.map, displayMedia: PropTypes.string, allowedEmoji: ImmutablePropTypes.list, - greentext: PropTypes.bool, }; // Avoid checking props that are functions (and whose equality will always @@ -495,7 +494,6 @@ class Status extends ImmutablePureComponent { onClick={this.handleClick} expanded={!status.get('hidden')} onExpandedToggle={this.handleExpandedToggle} - greentext={this.props.greentext} collapsable /> diff --git a/app/soapbox/components/status_content.js b/app/soapbox/components/status_content.js index 5ea78b02e..b0db603e2 100644 --- a/app/soapbox/components/status_content.js +++ b/app/soapbox/components/status_content.js @@ -1,4 +1,5 @@ import React from 'react'; +import { connect } from 'react-redux'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import { isRtl } from '../rtl'; @@ -6,11 +7,17 @@ import { FormattedMessage } from 'react-intl'; import Permalink from './permalink'; import classnames from 'classnames'; import Icon from 'soapbox/components/icon'; -import { processHtml } from 'soapbox/utils/tiny_post_html_processor'; +import { getSoapboxConfig } from 'soapbox/actions/soapbox'; +import { addGreentext } from 'soapbox/utils/greentext'; const MAX_HEIGHT = 642; // 20px * 32 (+ 2px padding at the top) -export default class StatusContent extends React.PureComponent { +const mapStateToProps = state => ({ + greentext: getSoapboxConfig(state).get('greentext'), +}); + +export default @connect(mapStateToProps) +class StatusContent extends React.PureComponent { static contextTypes = { router: PropTypes.object, @@ -150,35 +157,16 @@ export default class StatusContent extends React.PureComponent { this.node = c; } - getHtmlContent = () => { - const { status } = this.props; - - const properContent = status.get('contentHtml'); - - return this.greentext(properContent); + parseHtml = html => { + const { greentext } = this.props; + if (greentext) return addGreentext(html); + return html; } - greentext = html => { - if (!this.props.greentext) return html; - - // Copied from Pleroma FE - // https://git.pleroma.social/pleroma/pleroma-fe/-/blob/19475ba356c3fd6c54ca0306d3ae392358c212d1/src/components/status_content/status_content.js#L132 - return processHtml(html, (string) => { - try { - if (string.includes('>') && - string - .replace(/<[^>]+?>/gi, '') // remove all tags - .replace(/@\w+/gi, '') // remove mentions (even failed ones) - .trim() - .startsWith('>')) { - return `${string}`; - } else { - return string; - } - } catch(e) { - return string; - } - }); + getHtmlContent = () => { + const { status } = this.props; + const html = status.get('contentHtml'); + return this.parseHtml(html); } render() { diff --git a/app/soapbox/containers/status_container.js b/app/soapbox/containers/status_container.js index b4c2fbfcf..8f7af89a3 100644 --- a/app/soapbox/containers/status_container.js +++ b/app/soapbox/containers/status_container.js @@ -59,7 +59,6 @@ const makeMapStateToProps = () => { status: getStatus(state, props), displayMedia: getSettings(state).get('displayMedia'), allowedEmoji: soapbox.get('allowedEmoji'), - greentext: soapbox.get('greentext'), }; }; diff --git a/app/soapbox/features/status/components/detailed_status.js b/app/soapbox/features/status/components/detailed_status.js index e5ade55b8..43a645e60 100644 --- a/app/soapbox/features/status/components/detailed_status.js +++ b/app/soapbox/features/status/components/detailed_status.js @@ -36,7 +36,6 @@ export default class DetailedStatus extends ImmutablePureComponent { compact: PropTypes.bool, showMedia: PropTypes.bool, onToggleMediaVisibility: PropTypes.func, - greentext: PropTypes.bool, }; state = { @@ -192,7 +191,6 @@ export default class DetailedStatus extends ImmutablePureComponent { diff --git a/app/soapbox/features/status/containers/detailed_status_container.js b/app/soapbox/features/status/containers/detailed_status_container.js index f47781ee2..668ba020f 100644 --- a/app/soapbox/features/status/containers/detailed_status_container.js +++ b/app/soapbox/features/status/containers/detailed_status_container.js @@ -31,7 +31,6 @@ import { openModal } from '../../../actions/modal'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { showAlertForError } from '../../../actions/alerts'; import { getSettings } from 'soapbox/actions/settings'; -import { getSoapboxConfig } from 'soapbox/actions/soapbox'; import { deactivateUserModal, deleteUserModal, deleteStatusModal, toggleStatusSensitivityModal } from 'soapbox/actions/moderation'; const messages = defineMessages({ @@ -51,7 +50,6 @@ const makeMapStateToProps = () => { const mapStateToProps = (state, props) => ({ status: getStatus(state, props), domain: state.getIn(['meta', 'domain']), - greentext: getSoapboxConfig(state).get('greentext'), }); return mapStateToProps; diff --git a/app/soapbox/features/status/index.js b/app/soapbox/features/status/index.js index bff909f8f..b53deca44 100644 --- a/app/soapbox/features/status/index.js +++ b/app/soapbox/features/status/index.js @@ -116,7 +116,6 @@ const makeMapStateToProps = () => { me: state.get('me'), displayMedia: getSettings(state).get('displayMedia'), allowedEmoji: soapbox.get('allowedEmoji'), - greentext: soapbox.get('greentext'), }; }; @@ -546,7 +545,6 @@ class Status extends ImmutablePureComponent { onToggleHidden={this.handleToggleHidden} domain={domain} showMedia={this.state.showMedia} - greentext={this.props.greentext} onToggleMediaVisibility={this.handleToggleMediaVisibility} /> diff --git a/app/soapbox/utils/greentext.js b/app/soapbox/utils/greentext.js new file mode 100644 index 000000000..543bc2f23 --- /dev/null +++ b/app/soapbox/utils/greentext.js @@ -0,0 +1,22 @@ +import { processHtml } from './tiny_post_html_processor'; + +export const addGreentext = html => { + // Copied from Pleroma FE + // https://git.pleroma.social/pleroma/pleroma-fe/-/blob/19475ba356c3fd6c54ca0306d3ae392358c212d1/src/components/status_content/status_content.js#L132 + return processHtml(html, (string) => { + try { + if (string.includes('>') && + string + .replace(/<[^>]+?>/gi, '') // remove all tags + .replace(/@\w+/gi, '') // remove mentions (even failed ones) + .trim() + .startsWith('>')) { + return `${string}`; + } else { + return string; + } + } catch(e) { + return string; + } + }); +};