sou hace 8 años
padre
commit
66a51d5c39

+ 1 - 1
resource/js/app.js

@@ -109,7 +109,7 @@ const componentMappings = {
 };
 };
 // additional definitions if data exists
 // additional definitions if data exists
 if (pageId) {
 if (pageId) {
-  componentMappings['page-comments-list'] = <PageComments pageId={pageId} revisionId={pageRevisionId} revisionCreatedAt={pageRevisionCreatedAt} crowi={crowi} />;
+  componentMappings['page-comments-list'] = <PageComments pageId={pageId} revisionId={pageRevisionId} revisionCreatedAt={pageRevisionCreatedAt} crowi={crowi} crowiRenderer={crowiRenderer} pagePath={pagePath} />;
   componentMappings['page-attachment'] = <PageAttachment pageId={pageId} pageContent={pageContent} crowi={crowi} />;
   componentMappings['page-attachment'] = <PageAttachment pageId={pageId} pageContent={pageContent} crowi={crowi} />;
 }
 }
 if (pagePath) {
 if (pagePath) {

+ 3 - 1
resource/js/components/Page.js

@@ -110,7 +110,9 @@ export default class Page extends React.Component {
   render() {
   render() {
     const config = this.props.crowi.getConfig();
     const config = this.props.crowi.getConfig();
     const isMathJaxEnabled = !!config.env.MATHJAX;
     const isMathJaxEnabled = !!config.env.MATHJAX;
-
+    // (el) => {
+    //   this.revisionBodyElement = el;
+    // }
     return (
     return (
       <RevisionBody html={this.state.html}
       <RevisionBody html={this.state.html}
           inputRef={el => this.revisionBodyElement = el}
           inputRef={el => this.revisionBodyElement = el}

+ 44 - 0
resource/js/components/PageComment/Comment.js

@@ -5,6 +5,7 @@ import dateFnsFormat from 'date-fns/format';
 
 
 import ReactUtils from '../ReactUtils';
 import ReactUtils from '../ReactUtils';
 import UserPicture from '../User/UserPicture';
 import UserPicture from '../User/UserPicture';
+import RevisionBody from '../Page/RevisionBody';
 
 
 /**
 /**
  *
  *
@@ -24,6 +25,7 @@ export default class Comment extends React.Component {
     this.getRootClassName = this.getRootClassName.bind(this);
     this.getRootClassName = this.getRootClassName.bind(this);
     this.getRevisionLabelClassName = this.getRevisionLabelClassName.bind(this);
     this.getRevisionLabelClassName = this.getRevisionLabelClassName.bind(this);
     this.deleteBtnClickedHandler = this.deleteBtnClickedHandler.bind(this);
     this.deleteBtnClickedHandler = this.deleteBtnClickedHandler.bind(this);
+    this.renderHtml = this.renderHtml.bind(this);
   }
   }
 
 
   isCurrentUserEqualsToAuthor() {
   isCurrentUserEqualsToAuthor() {
@@ -48,6 +50,44 @@ export default class Comment extends React.Component {
     this.props.deleteBtnClicked(this.props.comment);
     this.props.deleteBtnClicked(this.props.comment);
   }
   }
 
 
+  renderHtml(markdown, highlightKeywords) {
+    var context = {
+      markdown,
+      dom: this.revisionBodyElement,
+      currentPagePath: this.props.pagePath,
+    };
+
+    const crowiRenderer = this.props.crowiRenderer;
+    const interceptorManager = this.props.crowi.interceptorManager;
+    interceptorManager.process('preCommentRender', context)
+      .then(() => interceptorManager.process('preCommentPreProcess', context))
+      .then(() => {
+        context.markdown = crowiRenderer.preProcess(context.markdown);
+      })
+      .then(() => interceptorManager.process('postCommentPreProcess', context))
+      .then(() => {
+        var parsedHTML = crowiRenderer.process(context.markdown);
+        context['parsedHTML'] = parsedHTML;
+      })
+      .then(() => interceptorManager.process('preCommentPostProcess', context))
+      .then(() => {
+        context.parsedHTML = crowiRenderer.postProcess(context.parsedHTML, context.dom);
+
+        // highlight
+        if (highlightKeywords != null) {
+          context.parsedHTML = this.getHighlightedBody(context.parsedHTML, highlightKeywords);
+        }
+      })
+      .then(() => interceptorManager.process('postCommentPostProcess', context))
+      .then(() => interceptorManager.process('preCommentRenderHtml', context))
+      .then(() => {
+        this.setState({ html: context.parsedHTML });
+      })
+      // process interceptors for post rendering
+      .then(() => interceptorManager.process('postCommentRenderHtml', context));
+
+  }
+
   render() {
   render() {
     const comment = this.props.comment;
     const comment = this.props.comment;
     const creator = comment.creator;
     const creator = comment.creator;
@@ -96,4 +136,8 @@ Comment.propTypes = {
   currentRevisionId: PropTypes.string.isRequired,
   currentRevisionId: PropTypes.string.isRequired,
   currentUserId: PropTypes.string.isRequired,
   currentUserId: PropTypes.string.isRequired,
   deleteBtnClicked: PropTypes.func.isRequired,
   deleteBtnClicked: PropTypes.func.isRequired,
+  crowi: PropTypes.object.isRequired,
+  crowiRenderer: PropTypes.object.isRequired,
+  pagePath: PropTypes.string.isRequired,
+  highlightKeywords: PropTypes.string,
 };
 };

+ 7 - 1
resource/js/components/PageComments.js

@@ -123,7 +123,10 @@ export default class PageComments extends React.Component {
         <Comment key={comment._id} comment={comment}
         <Comment key={comment._id} comment={comment}
           currentUserId={this.props.crowi.me}
           currentUserId={this.props.crowi.me}
           currentRevisionId={this.props.revisionId}
           currentRevisionId={this.props.revisionId}
-          deleteBtnClicked={this.confirmToDeleteComment} />
+          deleteBtnClicked={this.confirmToDeleteComment}
+          crowi={this.props.crowi}
+          crowiRenderer={this.props.crowiRenderer}
+          pagePath={this.props.pagePath} />
       );
       );
     });
     });
   }
   }
@@ -239,4 +242,7 @@ PageComments.propTypes = {
   revisionId: PropTypes.string,
   revisionId: PropTypes.string,
   revisionCreatedAt: PropTypes.number,
   revisionCreatedAt: PropTypes.number,
   crowi: PropTypes.object.isRequired,
   crowi: PropTypes.object.isRequired,
+  crowiRenderer: PropTypes.object.isRequired,
+  pagePath: PropTypes.string.isRequired,
+  highlightKeywords: PropTypes.string,
 };
 };