From 5596a6b37c440522176fdc05217161d7de7e169c Mon Sep 17 00:00:00 2001
From: JoramWilander <jwawilander@gmail.com>
Date: Thu, 23 Jul 2015 12:45:08 -0400
Subject: added client predictive commenting

---
 web/react/components/post_info.jsx | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

(limited to 'web/react/components/post_info.jsx')

diff --git a/web/react/components/post_info.jsx b/web/react/components/post_info.jsx
index 8eaaf4e8c..93d028e18 100644
--- a/web/react/components/post_info.jsx
+++ b/web/react/components/post_info.jsx
@@ -22,16 +22,19 @@ module.exports = React.createClass({
 
         var comments = "";
         var lastCommentClass = this.props.isLastComment ? " comment-icon__container__show" : " comment-icon__container__hide";
-        if (this.props.commentCount >= 1) {
+        if (this.props.commentCount >= 1  && !post.did_fail && !post.is_loading) {
             comments = <a href="#" className={"comment-icon__container theme" + lastCommentClass} onClick={this.props.handleCommentClick}><span className="comment-icon" dangerouslySetInnerHTML={{__html: Constants.COMMENT_ICON }} />{this.props.commentCount}</a>;
         }
 
+        var show_dropdown = isOwner || (this.props.allowReply === "true" && type != "Comment");
+        if (post.did_fail || post.is_loading) show_dropdown = false;
+
         return (
             <ul className="post-header post-info">
                 <li className="post-header-col"><time className="post-profile-time">{ utils.displayDateTime(post.create_at) }</time></li>
                     <li className="post-header-col post-header__reply">
                         <div className="dropdown">
-                        { isOwner || (this.props.allowReply === "true" && type != "Comment") ?
+                        { show_dropdown ?
                             <div>
                                 <a href="#" className="dropdown-toggle theme" type="button" data-toggle="dropdown" aria-expanded="false" />
                                 <ul className="dropdown-menu" role="menu">
-- 
cgit v1.2.3-1-g7c22


From fa1491bbfbb1261757943759edf44883d31e5477 Mon Sep 17 00:00:00 2001
From: JoramWilander <jwawilander@gmail.com>
Date: Wed, 12 Aug 2015 12:45:15 -0400
Subject: finalize implenetation of predictive client posts so that users get
 immediate feedback after posting

---
 web/react/components/post_info.jsx | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

(limited to 'web/react/components/post_info.jsx')

diff --git a/web/react/components/post_info.jsx b/web/react/components/post_info.jsx
index 93d028e18..37e525717 100644
--- a/web/react/components/post_info.jsx
+++ b/web/react/components/post_info.jsx
@@ -15,19 +15,19 @@ module.exports = React.createClass({
         var isOwner = UserStore.getCurrentId() == post.user_id;
         var isAdmin = UserStore.getCurrentUser().roles.indexOf("admin") > -1
 
-        var type = "Post"
-        if (post.root_id.length > 0) {
-            type = "Comment"
+        var type = "Post";
+        if (post.root_id && post.root_id.length > 0) {
+            type = "Comment";
         }
 
         var comments = "";
         var lastCommentClass = this.props.isLastComment ? " comment-icon__container__show" : " comment-icon__container__hide";
-        if (this.props.commentCount >= 1  && !post.did_fail && !post.is_loading) {
+        if (this.props.commentCount >= 1  && post.state !== Constants.POST_FAILED && post.state !== Constants.POST_LOADING) {
             comments = <a href="#" className={"comment-icon__container theme" + lastCommentClass} onClick={this.props.handleCommentClick}><span className="comment-icon" dangerouslySetInnerHTML={{__html: Constants.COMMENT_ICON }} />{this.props.commentCount}</a>;
         }
 
         var show_dropdown = isOwner || (this.props.allowReply === "true" && type != "Comment");
-        if (post.did_fail || post.is_loading) show_dropdown = false;
+        if (post.state === Constants.POST_FAILED || post.state === Constants.POST_LOADING) show_dropdown = false;
 
         return (
             <ul className="post-header post-info">
-- 
cgit v1.2.3-1-g7c22


From 76d54190a0abb4c03ca7207ae50eff02190ba89a Mon Sep 17 00:00:00 2001
From: JoramWilander <jwawilander@gmail.com>
Date: Fri, 14 Aug 2015 11:36:51 -0400
Subject: reformatting and minor refactoring of post_*.jsx to match style guide

---
 web/react/components/post_info.jsx | 84 ++++++++++++++++++++++++--------------
 1 file changed, 54 insertions(+), 30 deletions(-)

(limited to 'web/react/components/post_info.jsx')

diff --git a/web/react/components/post_info.jsx b/web/react/components/post_info.jsx
index 37e525717..f6ab0ed8a 100644
--- a/web/react/components/post_info.jsx
+++ b/web/react/components/post_info.jsx
@@ -12,44 +12,68 @@ module.exports = React.createClass({
     },
     render: function() {
         var post = this.props.post;
-        var isOwner = UserStore.getCurrentId() == post.user_id;
-        var isAdmin = UserStore.getCurrentUser().roles.indexOf("admin") > -1
+        var isOwner = UserStore.getCurrentId() === post.user_id;
+        var isAdmin = UserStore.getCurrentUser().roles.indexOf('admin') > -1;
 
-        var type = "Post";
+        var type = 'Post';
         if (post.root_id && post.root_id.length > 0) {
-            type = "Comment";
+            type = 'Comment';
         }
 
-        var comments = "";
-        var lastCommentClass = this.props.isLastComment ? " comment-icon__container__show" : " comment-icon__container__hide";
-        if (this.props.commentCount >= 1  && post.state !== Constants.POST_FAILED && post.state !== Constants.POST_LOADING) {
-            comments = <a href="#" className={"comment-icon__container theme" + lastCommentClass} onClick={this.props.handleCommentClick}><span className="comment-icon" dangerouslySetInnerHTML={{__html: Constants.COMMENT_ICON }} />{this.props.commentCount}</a>;
+        var comments = '';
+        var lastCommentClass = ' comment-icon__container__hide';
+        if (this.props.isLastComment) {
+            lastCommentClass = ' comment-icon__container__show';
         }
 
-        var show_dropdown = isOwner || (this.props.allowReply === "true" && type != "Comment");
-        if (post.state === Constants.POST_FAILED || post.state === Constants.POST_LOADING) show_dropdown = false;
+        if (this.props.commentCount >= 1 && post.state !== Constants.POST_FAILED && post.state !== Constants.POST_LOADING) {
+            comments = <a href='#' className={'comment-icon__container theme' + lastCommentClass} onClick={this.props.handleCommentClick}><span className='comment-icon' dangerouslySetInnerHTML={{__html: Constants.COMMENT_ICON}} />{this.props.commentCount}</a>;
+        }
+
+        var showDropdown = isOwner || (this.props.allowReply === 'true' && type !== 'Comment');
+        if (post.state === Constants.POST_FAILED || post.state === Constants.POST_LOADING) {
+            showDropdown = false;
+        }
+
+        var dropdownContents = [];
+        var dropdown;
+        if (showDropdown) {
+            var dataComments = 0;
+            if (type === 'Post') {
+                dataComments = this.props.commentCount;
+            }
+
+            if (isOwner) {
+                dropdownContents.push(<li role='presentation'><a href='#' role='menuitem' data-toggle='modal' data-target='#edit_post' data-title={type} data-message={post.message} data-postid={post.id} data-channelid={post.channel_id} data-comments={dataComments}>Edit</a></li>);
+            }
+
+            if (isOwner || isAdmin) {
+                dropdownContents.push(<li role='presentation'><a href='#' role='menuitem' data-toggle='modal' data-target='#delete_post' data-title={type} data-postid={post.id} data-channelid={post.channel_id} data-comments={dataComments}>Delete</a></li>);
+            }
+
+            if (this.props.allowReply === 'true') {
+                dropdownContents.push(<li role='presentation'><a className='reply-link theme' href='#' onClick={this.props.handleCommentClick}>Reply</a></li>);
+            }
+
+            dropdown = (
+                <div>
+                    <a href='#' className='dropdown-toggle theme' type='button' data-toggle='dropdown' aria-expanded='false' />
+                    <ul className='dropdown-menu' role='menu'>
+                        {dropdownContents}
+                    </ul>
+                </div>
+            );
+        }
 
         return (
-            <ul className="post-header post-info">
-                <li className="post-header-col"><time className="post-profile-time">{ utils.displayDateTime(post.create_at) }</time></li>
-                    <li className="post-header-col post-header__reply">
-                        <div className="dropdown">
-                        { show_dropdown ?
-                            <div>
-                                <a href="#" className="dropdown-toggle theme" type="button" data-toggle="dropdown" aria-expanded="false" />
-                                <ul className="dropdown-menu" role="menu">
-                                    { isOwner ? <li role="presentation"><a href="#" role="menuitem" data-toggle="modal" data-target="#edit_post" data-title={type} data-message={post.message} data-postid={post.id} data-channelid={post.channel_id} data-comments={type === "Post" ? this.props.commentCount : 0}>Edit</a></li>
-                                    : "" }
-                                    { isOwner || isAdmin ? <li role="presentation"><a href="#" role="menuitem" data-toggle="modal" data-target="#delete_post" data-title={type} data-postid={post.id} data-channelid={post.channel_id} data-comments={type === "Post" ? this.props.commentCount : 0}>Delete</a></li>
-                                    : "" }
-                                    { this.props.allowReply === "true" ? <li role="presentation"><a className="reply-link theme" href="#" onClick={this.props.handleCommentClick}>Reply</a></li>
-                                    : "" }
-                                </ul>
-                            </div>
-                            : "" }
-                        </div>
-                        { comments }
-                    </li>
+            <ul className='post-header post-info'>
+                <li className='post-header-col'><time className='post-profile-time'>{utils.displayDateTime(post.create_at)}</time></li>
+                <li className='post-header-col post-header__reply'>
+                    <div className='dropdown'>
+                        {dropdown}
+                    </div>
+                    {comments}
+                </li>
             </ul>
         );
     }
-- 
cgit v1.2.3-1-g7c22

