PageBody.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import React from 'react';
  2. import marked from 'marked';
  3. import hljs from 'highlight.js';
  4. export default class PageBody extends React.Component {
  5. constructor(props) {
  6. super(props);
  7. this.getMarkupHTML = this.getMarkupHTML.bind(this);
  8. }
  9. getMarkupHTML() {
  10. let body = this.props.pageBody;
  11. if (body === '') {
  12. body = this.props.page.revision.body;
  13. }
  14. //var contentHtml = Crowi.unescape(contentText);
  15. //// TODO 前処理系のプラグイン化
  16. //contentHtml = this.preFormatMarkdown(contentHtml);
  17. //contentHtml = this.expandImage(contentHtml);
  18. //contentHtml = this.link(contentHtml);
  19. //var $body = this.$revisionBody;
  20. // Using async version of marked
  21. //{}, function (err, content) {
  22. // if (err) {
  23. // throw err;
  24. // }
  25. // $body.html(content);
  26. //});
  27. //return body;
  28. try {
  29. marked.setOptions({
  30. gfm: true,
  31. highlight: (code, lang, callback) => {
  32. let result, hl;
  33. if (lang) {
  34. try {
  35. hl = hljs.highlight(lang, code);
  36. result = hl.value;
  37. } catch (e) {
  38. result = code;
  39. }
  40. } else {
  41. result = code;
  42. }
  43. return callback(null, result);
  44. },
  45. tables: true,
  46. breaks: true,
  47. pedantic: false,
  48. sanitize: false,
  49. smartLists: true,
  50. smartypants: false,
  51. langPrefix: 'lang-'
  52. });
  53. console.log('parsing', 'いくぜ');
  54. const parsed = marked(body);
  55. console.log('parsed', parsed);
  56. } catch (e) { console.log(e); }
  57. return { __html: parsed };
  58. }
  59. render() {
  60. console.log('Render!');
  61. return (
  62. <div
  63. className="content"
  64. dangerouslySetInnerHTML={this.getMarkupHTML()}
  65. />
  66. );
  67. }
  68. }
  69. PageBody.propTypes = {
  70. page: React.PropTypes.object.isRequired,
  71. pageBody: React.PropTypes.string,
  72. };
  73. PageBody.defaultProps = {
  74. page: {},
  75. pageBody: '',
  76. };