From 1ec8714c2cef40be1b2a373ff2775104613ca6d2 Mon Sep 17 00:00:00 2001 From: tykayn Date: Thu, 31 Dec 2020 18:19:25 +0100 Subject: [PATCH] format status and sanitize --- .../mastodon/components/status_content.js | 68 ++++++++++++++++--- .../compose/components/compose_form.js | 5 +- app/javascript/styles/bliss/_markdown.scss | 1 + 3 files changed, 64 insertions(+), 10 deletions(-) diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js index 93eba6765..24edf714e 100644 --- a/app/javascript/mastodon/components/status_content.js +++ b/app/javascript/mastodon/components/status_content.js @@ -6,6 +6,8 @@ import Permalink from './permalink'; import classnames from 'classnames'; import PollContainer from 'mastodon/containers/poll_container'; import { autoPlayGif } from 'mastodon/initial_state'; +import snarkdown from 'snarkdown'; +import DOMPurify from 'dompurify'; const MAX_HEIGHT = 642; // 20px * 32 (+ 2px padding at the top) @@ -171,9 +173,25 @@ export default class StatusContent extends React.PureComponent { this.node = c; }; + /** + * format markdown after replacing and sanitizing status post + * @param htmlContent + * @returns {*} + */ + cleanHtmlAndFormatMarkdown(htmlContent){ + return snarkdown(DOMPurify.sanitize(htmlContent.trim() + .replace(/(\)/ig, '') + .replace(/(\<\/p\>)/ig, '\r\n') + .replace('
', '\r\n'), + )) ; + } + render() { const { status } = this.props; + let htmlFormatted = this.cleanHtmlAndFormatMarkdown(status.get('contentHtml')); + let spoilerFormatted = this.cleanHtmlAndFormatMarkdown(status.get('spoilerHtml')); + if (status.get('content').length === 0) { return null; } @@ -182,9 +200,9 @@ export default class StatusContent extends React.PureComponent { const renderReadMore = this.props.onClick && status.get('collapsed'); const renderViewThread = this.props.showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id']); - const content = { __html: status.get('contentHtml') }; - const spoilerContent = { __html: status.get('spoilerHtml') }; - const classNames = classnames('status__content', { + const content = { __html: htmlFormatted }; + const spoilerContent = { __html: spoilerFormatted }; + const classNames = classnames('formatted-markdown status__content', { 'status__content--with-action' : this.props.onClick && this.context.router, 'status__content--with-spoiler': status.get('spoiler_text').length > 0, 'status__content--collapsed' : renderReadMore, @@ -249,7 +267,13 @@ export default class StatusContent extends React.PureComponent { } return ( -
+
+
+
+            pre:
+            
+ {content} +
{!hidden && !!status.get('poll') && } @@ -271,8 +304,18 @@ export default class StatusContent extends React.PureComponent { ); } else if (this.props.onClick) { const output = [ -
-
+
+
{!!status.get('poll') && } @@ -287,8 +330,15 @@ export default class StatusContent extends React.PureComponent { return output; } else { return ( -
-
+
+
{!!status.get('poll') && } diff --git a/app/javascript/mastodon/features/compose/components/compose_form.js b/app/javascript/mastodon/features/compose/components/compose_form.js index 917b3b5cc..88f405e47 100644 --- a/app/javascript/mastodon/features/compose/components/compose_form.js +++ b/app/javascript/mastodon/features/compose/components/compose_form.js @@ -75,6 +75,9 @@ class ComposeForm extends ImmutablePureComponent { static defaultProps = { showSearch : false, maxTootCharsLimit: 7777, + text: '# salut les bibous\n' + + '\n' + + 'hé ouais', }; handleChange = (e) => { @@ -225,7 +228,7 @@ un lien vers [[www.wikipedia.org]] html = snarkdown(md); } else { html = snarkdown(markdownInput); - html = DOMPurify.sanitize(markdownInput); + // html = DOMPurify.sanitize(markdownInput); } this.textMarkdownConverted = html; return html; diff --git a/app/javascript/styles/bliss/_markdown.scss b/app/javascript/styles/bliss/_markdown.scss index 62d69fb46..b06cc7670 100644 --- a/app/javascript/styles/bliss/_markdown.scss +++ b/app/javascript/styles/bliss/_markdown.scss @@ -7,6 +7,7 @@ } h1,h2,h3,h4,h5,h6{ + display:block; &:first-letter{ text-transform: uppercase; }