DefconDotNet

Untitled

Mar 2nd, 2016
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var CommentBox = React.createClass({
  2.     loadCommentsFromServer: function () {
  3.         var xhr = new XMLHttpRequest();
  4.         xhr.open("get", this.props.url, true);
  5.         xhr.onload = function () {
  6.             var data = JSON.parse(xhr.responseText);
  7.             this.setState({ data: data });
  8.         }.bind(this);
  9.         xhr.send();
  10.     },
  11.     getInitialState: function () {
  12.         return { data: this.props.initialData };
  13.     },
  14.     handleCommentSubmit: function (comment) {
  15.         var comments = this.state.data;
  16.         comment.Id = createGuid();
  17.         var newComments = comments.concat([comment]);
  18.         this.setState({ data: newComments });
  19.  
  20.         var data = new FormData();
  21.         data.append("Author", comment.Author);
  22.         data.append("Text", comment.Text);
  23.         data.append("Id", comment.Id);
  24.  
  25.         var xhr = new XMLHttpRequest();
  26.         xhr.open("post", this.props.submitUrl, true);
  27.         xhr.onload = function () {
  28.             this.loadCommentsFromServer();
  29.         }.bind(this);
  30.         xhr.send(data);
  31.     },
  32.     removeComment: function (id) {
  33.         console.log("CommentBox.removeComment: " + id);
  34.         // console.log(id);
  35.         //var xhr = new XMLHttpRequest();
  36.         //xhr.open("post", this.props.deleteUrlx, true);
  37.         //xhr.onload = function () {
  38.         //    //this.loadCommentsFromServer();
  39.         //}.bind(this);
  40.         //xhr.send(id);
  41.     },
  42.     componentDidMount: function () {
  43.         this.loadCommentsFromServer();
  44.         window.setInterval(this.loadCommentsFromServer, this.props.pollInterval);
  45.     },
  46.     render: function () {
  47.         return (
  48.           <div className="commentBox">
  49.             <h1>Comments</h1>
  50.             <CommentList onRemoveComment={this.removeComment.bind(this)} data={this.state.data} />
  51.             <CommentForm onCommentSubmit={this.handleCommentSubmit} />
  52.           </div>
  53.         );
  54.     }
  55. });
  56.  
  57. var CommentList = React.createClass({
  58.     render: function () {
  59.         return (
  60.           <div className="commentList">
  61.               {this.props.deleteUrlx}
  62.               {this.props.data.map(comment =>
  63.                 <Comment author={comment.Author} key={comment.Id} delComment={this.props.onRemoveComment.bind(this, comment.Id)}>
  64.                     {comment.Text}
  65.                 </Comment>
  66.               )}
  67.           </div>
  68.         );
  69.     }
  70. });
  71.  
  72. var Comment = React.createClass({
  73.     removeCommentTest: function () {
  74.         console.log("Comment.removeCommentTest");
  75.     },
  76.     render: function () {
  77.         var converter = new Showdown.converter();
  78.         var rawMarkup = converter.makeHtml(this.props.children.toString());
  79.  
  80.         return (
  81.           <div className="comment">
  82.             <h3 className="comment-author">{this.props.author}</h3>
  83.             <span dangerouslySetInnerHTML={{__html: rawMarkup}} />
  84.             <span className="delete-comment" onClick={this.props.delComment}>DELETE</span>
  85.           </div>
  86.       );
  87.     }
  88. });
  89.  
  90. var CommentForm = React.createClass({
  91.     handleSubmit: function (e) {
  92.         e.preventDefault();
  93.         var author = this.refs.author.value.trim();
  94.         var text = this.refs.text.value.trim();
  95.         if (!text || !author) {
  96.             return;
  97.         }
  98.         this.props.onCommentSubmit({ Author: author, Text: text });
  99.         this.refs.author.visible = "";
  100.         this.refs.text.value = "";
  101.         return;
  102.     },
  103.     render: function () {
  104.         return (
  105.           <form className="commentForm" onSubmit={this.handleSubmit}>
  106.               <div>Add new comment</div>
  107.             <input type="text" placeholder="Your name" ref="author" />
  108.             <input type="text" placeholder="Say something..." ref="text" />
  109.             <input type="submit" value="Post" />
  110.           </form>
  111.       );
  112.     }
  113. });
  114.  
  115. function createGuid() {
  116.     function s4() {
  117.         return Math.floor((1 + Math.random()) * 0x10000)
  118.           .toString(16)
  119.           .substring(1);
  120.     }
  121.     return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
  122.       s4() + '-' + s4() + s4() + s4();
  123. }
Advertisement
Add Comment
Please, Sign In to add comment