Mathjax.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. export default class Mathjax {
  2. constructor(crowi) {
  3. this.crowi = crowi;
  4. this.defaultUrl = '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?skipStartupTypeset=true';
  5. this.mathJaxConfigured = false;
  6. const config = crowi.getConfig();
  7. if (config.env.MATHJAX) {
  8. this.mathJaxConfigured = true;
  9. if (crowi.window.MathJax) {
  10. return ;
  11. }
  12. const document = crowi.document;
  13. const head = document.getElementsByTagName('head')[0];
  14. const mathJaxConfig= document.createElement('script');
  15. mathJaxConfig.type = 'text/x-mathjax-config';
  16. mathJaxConfig.text = `MathJax.Hub.Config({
  17. extensions: ["tex2jax.js"],
  18. jax: ["input/TeX", "output/SVG"],
  19. tex2jax: {
  20. inlineMath: [ ['$','$'] ],
  21. displayMath: [ ['$$','$$'] ],
  22. processEscapes: true
  23. },
  24. showMathMenu: false,
  25. showMathMenuMSIE: false,
  26. showProcessingMessages: false,
  27. messageStyle: "none",
  28. skipStartupTypeset: true
  29. });`;
  30. head.appendChild(mathJaxConfig);
  31. const script = document.createElement('script');
  32. script.type = 'text/javascript';
  33. script.src = this.defaultUrl;
  34. head.appendChild(script);
  35. }
  36. this.process = this.process.bind(this);
  37. }
  38. process(html, dom) {
  39. if (!this.mathJaxConfigured) {
  40. return html;
  41. }
  42. const intervalId = setInterval(() => {
  43. if (this.crowi.window.MathJax) {
  44. const MathJax = this.crowi.window.MathJax;
  45. MathJax.Hub.Queue(["Typeset", MathJax.Hub, dom.id]);
  46. clearInterval(intervalId);
  47. }
  48. }, 100);
  49. return html;
  50. }
  51. }