From d293bc0b799a679cd27ed4ef6e818b0ca96998d9 Mon Sep 17 00:00:00 2001
From: Reed Garmsen <rgarmsen2295@gmail.com>
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 = (
-                <p className="post-link">
-                    <span>Commented on {name}{apostrophe} message: <a className="theme" onClick={this.props.handleCommentClick}>{message}</a></span>
-                </p>
-            );
+            if (allowTextFormatting) {
+                message = formatText(message, {sanitize: true, mangle: false, gfm: true, breaks: true, tables: false, smartypants: true, renderer: utils.customMarkedRenderer({disable: true})});
+                comment = (
+                    <p className="post-link">
+                        <span>Commented on {name}{apostrophe} message: <a className="theme" onClick={this.props.handleCommentClick} dangerouslySetInnerHTML={{__html: message}} /></span>
+                    </p>
+                );
+            } else {
+                comment = (
+                    <p className="post-link">
+                        <span>Commented on {name}{apostrophe} message: <a className="theme" onClick={this.props.handleCommentClick}>{message}</a></span>
+                    </p>
+                );
+            }
 
             postClass += " post-comment";
         }
@@ -67,7 +78,11 @@ module.exports = React.createClass({
         return (
             <div className="post-body">
                 { comment }
+                {allowTextFormatting ?
+                <div key={post.id+"_message"} className={postClass}><span>{inner}</span></div>
+                :
                 <p key={post.id+"_message"} className={postClass}><span>{inner}</span></p>
+                }
                 { filenames && filenames.length > 0 ?
                     <FileAttachmentList
                         filenames={filenames}
-- 
cgit v1.2.3-1-g7c22


From e02883baf2fd2a0cfc21bd557bc0ecc69afd707c Mon Sep 17 00:00:00 2001
From: Reed Garmsen <rgarmsen2295@gmail.com>
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 = <a className="theme" onClick={function(){ utils.searchForTerm(profile.username); }}>{profile.username}</a>;
+                name = <a className='theme' onClick={utils.searchForTerm.bind(this, profile.username)}>{profile.username}</a>;
             }
 
-            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 = (
-                    <p className="post-link">
-                        <span>Commented on {name}{apostrophe} message: <a className="theme" onClick={this.props.handleCommentClick} dangerouslySetInnerHTML={{__html: message}} /></span>
+                    <p className='post-link'>
+                        <span>Commented on {name}{apostrophe} message: <a className='theme' onClick={this.props.handleCommentClick} dangerouslySetInnerHTML={{__html: message}} /></span>
                     </p>
                 );
             } else {
                 comment = (
-                    <p className="post-link">
-                        <span>Commented on {name}{apostrophe} message: <a className="theme" onClick={this.props.handleCommentClick}>{message}</a></span>
+                    <p className='post-link'>
+                        <span>Commented on {name}{apostrophe} message: <a className='theme' onClick={this.props.handleCommentClick}>{message}</a></span>
                     </p>
                 );
             }
 
-            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 = <p key={post.id + '_message'} className={postClass}><span>{inner}</span></p>;
+        if (allowTextFormatting) {
+            innerHolder = <div key={post.id + '_message'} className={postClass}><span>{inner}</span></div>;
+        }
+
+        var fileAttachmentHolder = '';
+        if (filenames && filenames.length > 0) {
+            fileAttachmentHolder = (<FileAttachmentList
+                                        filenames={filenames}
+                                        modalId={'view_image_modal_' + post.id}
+                                        channelId={post.channel_id}
+                                        userId={post.user_id} />);
+        }
+
         return (
-            <div className="post-body">
-                { comment }
-                {allowTextFormatting ?
-                <div key={post.id+"_message"} className={postClass}><span>{inner}</span></div>
-                :
-                <p key={post.id+"_message"} className={postClass}><span>{inner}</span></p>
-                }
-                { filenames && filenames.length > 0 ?
-                    <FileAttachmentList
-                        filenames={filenames}
-                        modalId={"view_image_modal_" + post.id}
-                        channelId={post.channel_id}
-                        userId={post.user_id} />
-                : "" }
-                { embed }
+            <div className='post-body'>
+                {comment}
+                {innerHolder}
+                {fileAttachmentHolder}
+                {embed}
             </div>
         );
     }
-- 
cgit v1.2.3-1-g7c22

