From d293bc0b799a679cd27ed4ef6e818b0ca96998d9 Mon Sep 17 00:00:00 2001 From: Reed Garmsen Date: Wed, 8 Jul 2015 11:34:34 -0700 Subject: Implemented basic text formatting package using a modfied version of the marked js library. Supports *bold*, _italics_, and `code` --- web/react/components/post_body.jsx | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'web/react/components/post_body.jsx') diff --git a/web/react/components/post_body.jsx b/web/react/components/post_body.jsx index 860c96d84..bf039d79b 100644 --- a/web/react/components/post_body.jsx +++ b/web/react/components/post_body.jsx @@ -4,6 +4,7 @@ var FileAttachmentList = require('./file_attachment_list.jsx'); var UserStore = require('../stores/user_store.jsx'); var utils = require('../utils/utils.jsx'); +var formatText = require('../../static/js/marked/lib/marked.js'); module.exports = React.createClass({ componentWillReceiveProps: function(nextProps) { @@ -19,6 +20,7 @@ module.exports = React.createClass({ var filenames = this.props.post.filenames; var parentPost = this.props.parentPost; var inner = utils.textToJsx(this.state.message); + var allowTextFormatting = config.AllowTextFormatting; var comment = ""; var reply = ""; @@ -50,11 +52,20 @@ module.exports = React.createClass({ } } - comment = ( -

- Commented on {name}{apostrophe} message: {message} -

- ); + if (allowTextFormatting) { + message = formatText(message, {sanitize: true, mangle: false, gfm: true, breaks: true, tables: false, smartypants: true, renderer: utils.customMarkedRenderer({disable: true})}); + comment = ( +

+ Commented on {name}{apostrophe} message: +

+ ); + } else { + comment = ( +

+ Commented on {name}{apostrophe} message: {message} +

+ ); + } postClass += " post-comment"; } @@ -67,7 +78,11 @@ module.exports = React.createClass({ return (
{ comment } + {allowTextFormatting ? +
{inner}
+ :

{inner}

+ } { filenames && filenames.length > 0 ? Date: Mon, 10 Aug 2015 16:51:59 -0700 Subject: Cosmetic refactoring of post_body.jsx --- web/react/components/post_body.jsx | 69 ++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 33 deletions(-) (limited to 'web/react/components/post_body.jsx') diff --git a/web/react/components/post_body.jsx b/web/react/components/post_body.jsx index bf039d79b..fab6833e6 100644 --- a/web/react/components/post_body.jsx +++ b/web/react/components/post_body.jsx @@ -9,11 +9,11 @@ var formatText = require('../../static/js/marked/lib/marked.js'); module.exports = React.createClass({ componentWillReceiveProps: function(nextProps) { var linkData = utils.extractLinks(nextProps.post.message); - this.setState({ links: linkData["links"], message: linkData["text"] }); + this.setState({links: linkData.links, message: linkData.text}); }, getInitialState: function() { var linkData = utils.extractLinks(this.props.post.message); - return { links: linkData["links"], message: linkData["text"] }; + return {links: linkData.links, message: linkData.text}; }, render: function() { var post = this.props.post; @@ -22,52 +22,51 @@ module.exports = React.createClass({ var inner = utils.textToJsx(this.state.message); var allowTextFormatting = config.AllowTextFormatting; - var comment = ""; - var reply = ""; - var postClass = ""; + var comment = ''; + var postClass = ''; if (parentPost) { var profile = UserStore.getProfile(parentPost.user_id); - var apostrophe = ""; - var name = "..."; + var apostrophe = ''; + var name = '...'; if (profile != null) { if (profile.username.slice(-1) === 's') { apostrophe = "'"; } else { apostrophe = "'s"; } - name = {profile.username}; + name = {profile.username}; } - var message = "" - if(parentPost.message) { - message = utils.replaceHtmlEntities(parentPost.message) + var message = ''; + if (parentPost.message) { + message = utils.replaceHtmlEntities(parentPost.message); } else if (parentPost.filenames.length) { message = parentPost.filenames[0].split('/').pop(); if (parentPost.filenames.length === 2) { - message += " plus 1 other file"; + message += ' plus 1 other file'; } else if (parentPost.filenames.length > 2) { - message += " plus " + (parentPost.filenames.length - 1) + " other files"; + message += ' plus ' + (parentPost.filenames.length - 1) + ' other files'; } } if (allowTextFormatting) { message = formatText(message, {sanitize: true, mangle: false, gfm: true, breaks: true, tables: false, smartypants: true, renderer: utils.customMarkedRenderer({disable: true})}); comment = ( -

- Commented on {name}{apostrophe} message: +

+ Commented on {name}{apostrophe} message:

); } else { comment = ( -

- Commented on {name}{apostrophe} message: {message} +

+ Commented on {name}{apostrophe} message: {message}

); } - postClass += " post-comment"; + postClass += ' post-comment'; } var embed; @@ -75,22 +74,26 @@ module.exports = React.createClass({ embed = utils.getEmbed(this.state.links[0]); } + var innerHolder =

{inner}

; + if (allowTextFormatting) { + innerHolder =
{inner}
; + } + + var fileAttachmentHolder = ''; + if (filenames && filenames.length > 0) { + fileAttachmentHolder = (); + } + return ( -
- { comment } - {allowTextFormatting ? -
{inner}
- : -

{inner}

- } - { filenames && filenames.length > 0 ? - - : "" } - { embed } +
+ {comment} + {innerHolder} + {fileAttachmentHolder} + {embed}
); } -- cgit v1.2.3-1-g7c22