RevisionBody.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. // TODO refactor
  4. import { PreviewOptions } from '../PageEditor/OptionsSelector';
  5. export default class RevisionBody extends React.Component {
  6. constructor(props) {
  7. super(props);
  8. }
  9. componentDidMount() {
  10. if (this.props.isMathJaxEnabled && this.props.renderMathJaxOnInit) {
  11. this.renderMathJax();
  12. }
  13. }
  14. componentDidUpdate() {
  15. if (this.props.isMathJaxEnabled && this.props.renderMathJaxInRealtime) {
  16. this.renderMathJax();
  17. }
  18. }
  19. renderMathJax() {
  20. const MathJax = window.MathJax;
  21. if (MathJax != null) {
  22. MathJax.Hub.Queue(["Typeset", MathJax.Hub, this.element]);
  23. }
  24. }
  25. generateInnerHtml(html) {
  26. return {__html: html};
  27. }
  28. render() {
  29. return (
  30. <div
  31. ref={(elm) => {
  32. this.element = elm;
  33. this.props.inputRef(elm);
  34. }}
  35. className="wiki" dangerouslySetInnerHTML={this.generateInnerHtml(this.props.html)}>
  36. {/* TODO add .page-editor-preview-body when using from PageEditor */}
  37. {/* className="wiki page-editor-preview-body" dangerouslySetInnerHTML={this.generateInnerHtml(this.props.html)}> */}
  38. </div>
  39. )
  40. }
  41. }
  42. RevisionBody.propTypes = {
  43. html: PropTypes.string,
  44. inputRef: PropTypes.func.isRequired, // for getting div element
  45. isMathJaxEnabled: PropTypes.bool,
  46. renderMathJaxOnInit: PropTypes.bool,
  47. renderMathJaxInRealtime: PropTypes.bool,
  48. // TODO inject previewOptions
  49. // previewOptions: PropTypes.instanceOf(PreviewOptions),
  50. };