mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-30 10:44:10 -05:00
0d57ddfd23
Ignored MathJax setup when not available GitOrigin-RevId: 716af272070b15d3fa1c346bea611f0e1abbac33
52 lines
1.4 KiB
JavaScript
52 lines
1.4 KiB
JavaScript
import React, { useRef, useEffect } from 'react'
|
|
import PropTypes from 'prop-types'
|
|
import Linkify from 'react-linkify'
|
|
|
|
function MessageContent({ content }) {
|
|
const root = useRef(null)
|
|
|
|
useEffect(() => {
|
|
if (!(window.MathJax && window.MathJax.Hub)) {
|
|
return
|
|
}
|
|
const MJHub = window.MathJax.Hub
|
|
const inlineMathConfig = MJHub.config && MJHub.config.tex2jax.inlineMath
|
|
const alreadyConfigured = inlineMathConfig.some(
|
|
c => c[0] === '$' && c[1] === '$'
|
|
)
|
|
if (!alreadyConfigured) {
|
|
MJHub.Config({
|
|
tex2jax: {
|
|
inlineMath: inlineMathConfig.concat([['$', '$']])
|
|
}
|
|
})
|
|
}
|
|
}, [])
|
|
|
|
useEffect(() => {
|
|
// adds attributes to all the links generated by <Linkify/>, required due to https://github.com/tasti/react-linkify/issues/99
|
|
for (let a of root.current.getElementsByTagName('a')) {
|
|
a.setAttribute('target', '_blank')
|
|
a.setAttribute('rel', 'noreferrer noopener')
|
|
}
|
|
|
|
// MathJax typesetting
|
|
const MJHub = window.MathJax.Hub
|
|
const timeoutHandler = setTimeout(() => {
|
|
MJHub.Queue(['Typeset', MJHub, root.current])
|
|
}, 0)
|
|
return () => clearTimeout(timeoutHandler)
|
|
}, [content])
|
|
|
|
return (
|
|
<p ref={root}>
|
|
<Linkify>{content}</Linkify>
|
|
</p>
|
|
)
|
|
}
|
|
|
|
MessageContent.propTypes = {
|
|
content: PropTypes.string.isRequired
|
|
}
|
|
|
|
export default MessageContent
|