overleaf/services/web/frontend/js/directives/mathjax.js
Alasdair Smith 0d2a768e1e Merge pull request #2937 from overleaf/as-remove-global-lodash
Replace global Lodash with explicit imports in frontend

GitOrigin-RevId: b092647039975ac594b69ce1fa145fd03552cc60
2020-06-24 02:10:29 +00:00

42 lines
1.2 KiB
JavaScript

import _ from 'lodash'
/* global MathJax */
import App from '../base'
export default App.directive('mathjax', function($compile, $parse) {
return {
link(scope, element, attrs) {
if (!(MathJax && MathJax.Hub)) return
// Allowing HTML can be unsafe unless using something like
// `ng-bind-html` because of potential Angular XSS via {{/}}
if (!$parse(attrs.mathjaxAllowHtml)(scope)) {
const mathJaxContents = element.html()
const nonBindableEl = $compile('<span ng-non-bindable></span>')({})
element.html('').append(nonBindableEl)
nonBindableEl.html(mathJaxContents)
}
if (attrs.delimiter !== 'no-single-dollar') {
const inlineMathConfig =
MathJax.Hub.config && MathJax.Hub.config.tex2jax.inlineMath
const alreadyConfigured = _.find(
inlineMathConfig,
c => c[0] === '$' && c[1] === '$'
)
if (!alreadyConfigured) {
MathJax.Hub.Config({
tex2jax: {
inlineMath: inlineMathConfig.concat([['$', '$']])
}
})
}
}
setTimeout(() => {
MathJax.Hub.Queue(['Typeset', MathJax.Hub, element.get(0)])
}, 0)
}
}
})