]> Untitled Git - lemmy.git/commitdiff
Adding collapse comments
authorDessalines <tyhou13@gmx.com>
Tue, 16 Jul 2019 05:56:46 +0000 (22:56 -0700)
committerDessalines <tyhou13@gmx.com>
Tue, 16 Jul 2019 05:56:46 +0000 (22:56 -0700)
- Fixes #179

ui/src/components/comment-form.tsx
ui/src/components/comment-node.tsx

index a69ae06fc65911021df78a0c8ea0e8c869e1e181..5181e45e121a6a3c67d5fd8c508f4e83c7eb2fee 100644 (file)
@@ -84,6 +84,8 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
     if (i.props.node) {
       i.props.onReplyCancel();
     }
+    
+    autosize.update(document.querySelector('textarea'));
   }
 
   handleCommentContentChange(i: CommentForm, event: any) {
index 126966a7badc90c7ac70f1e01c2723d6556e1e09..aa7dfbe3b2588898bc3081f543b3851ff9b81e04 100644 (file)
@@ -19,6 +19,7 @@ interface CommentNodeState {
   banReason: string;
   banExpires: string;
   banType: BanType;
+  collapsed: boolean;
 }
 
 interface CommentNodeProps {
@@ -41,7 +42,8 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
     showBanDialog: false,
     banReason: null,
     banExpires: null,
-    banType: BanType.Community
+    banType: BanType.Community,
+    collapsed: false,
   }
 
   constructor(props: any, context: any) {
@@ -88,9 +90,12 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
             <li className="list-inline-item">
               <span><MomentTime data={node.comment} /></span>
             </li>
+            <li className="list-inline-item">
+              <div className="pointer text-monospace" onClick={linkEvent(this, this.handleCommentCollapse)}>{this.state.collapsed ? '[+]' : '[-]'}</div>
+            </li>
           </ul>
           {this.state.showEdit && <CommentForm node={node} edit onReplyCancel={this.handleReplyCancel} disabled={this.props.locked} />}
-          {!this.state.showEdit &&
+          {!this.state.showEdit && !this.state.collapsed &&
             <div>
               <div className="md-div" dangerouslySetInnerHTML={mdToHtml(node.comment.removed ? '*removed*' : node.comment.deleted ? '*deleted*' : node.comment.content)} />
               <ul class="list-inline mb-1 text-muted small font-weight-bold">
@@ -202,7 +207,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
             disabled={this.props.locked} 
           />
         }
-        {this.props.node.children && 
+        {this.props.node.children && !this.state.collapsed &&
           <CommentNodes 
             nodes={this.props.node.children} 
             locked={this.props.locked} 
@@ -210,6 +215,8 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
             admins={this.props.admins}
           />
         }
+        {/* A collapsed clearfix */}
+        {this.state.collapsed && <div class="row col-12"></div>}
       </div>
     )
   }
@@ -430,4 +437,9 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
     let then = moment.utc(this.props.node.comment.published);
     return now.isBefore(then);
   }
+
+  handleCommentCollapse(i: CommentNode) {
+    i.state.collapsed = !i.state.collapsed;
+    i.setState(i.state);
+  }
 }