CommentForm.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. /**
  4. *
  5. * @author Yuki Takei <yuki@weseek.co.jp>
  6. *
  7. * @export
  8. * @class Comment
  9. * @extends {React.Component}
  10. */
  11. export default class CommentForm extends React.Component {
  12. constructor(props) {
  13. super(props);
  14. this.state = {
  15. comment: '',
  16. isMarkdown: false,
  17. };
  18. this.testComment = new Comment();
  19. this.handleChange = this.handleChange.bind(this);
  20. this.postComment = this.postComment.bind(this);
  21. }
  22. handleChange(event) {
  23. const target = event.target;
  24. const value = target.type === 'checkbox' ? target.checked : target.value;
  25. const name = target.name;
  26. this.setState({
  27. [name]: value
  28. });
  29. }
  30. postComment(event) {
  31. let mk = this.state.isMarkdown ? 'Markdown' : 'Plain';
  32. alert(mk + ' Comment: ' + this.state.comment);
  33. // this.props.crowi.apiPost('/comments.add', {page_id: this.props.pageId});
  34. event.preventDefault();
  35. }
  36. render() {
  37. //{% if not user %}disabled{% endif %}をtextareaとbuttonに追加
  38. return (
  39. <div>
  40. <form className="form page-comment-form" id="page-comment-form" onSubmit={this.postComment}>
  41. <div className="comment-form">
  42. <div className="comment-form-user">
  43. <img src="{{ user|picture }}" className="picture img-circle" width="25" alt="{{ user.name }}" title="{{ user.name }}" />
  44. </div>
  45. <div className="comment-form-main">
  46. <div className="comment-write" id="comment-write">
  47. <textarea className="comment-form-comment form-control" id="comment-form-comment" name="comment"
  48. required placeholder="Write comments here..." onChange={this.handleChange}></textarea>
  49. <input type="checkbox" id="comment-form-is-markdown" name="isMarkdown" value="1" onChange={this.handleChange} /> Markdown<br />
  50. </div>
  51. <div className="comment-submit">
  52. <input type="hidden" name="_csrf" value="{{ csrf() }}" />
  53. <input type="hidden" name="commentForm[page_id]" value="{{ page._id.toString() }}" />
  54. <input type="hidden" name="commentForm[revision_id]" value="{{ revision._id.toString() }}" />
  55. <div className="pull-right">
  56. <span className="text-danger" id="comment-form-message"></span>
  57. <button type="submit" value="Submit" id="comment-form-button" className="fcbtn btn btn-sm btn-outline btn-rounded btn-primary btn-1b">
  58. Comment
  59. </button>
  60. </div>
  61. <div className="clearfix"></div>
  62. </div>
  63. </div>
  64. </div>
  65. </form>
  66. </div>
  67. );
  68. }
  69. }
  70. CommentForm.propTypes = {
  71. crowi: PropTypes.object.isRequired,
  72. pageId: PropTypes.string,
  73. };