|
1 | | -window.MathJax = { |
2 | | - loader: { |
3 | | - load: ['ui/safe'] |
4 | | - }, |
5 | | - options: { |
6 | | - enableMenu: false |
7 | | - }, |
8 | | - tex: { |
9 | | - inlineMath: [['$$\\(', '$$\\)']], |
10 | | - displayMath: [['$$\\[', '$$\\]']], |
11 | | - processEscapes: false, |
12 | | - processRefs: true, |
13 | | - processEnvironments: false, |
14 | | - tags: 'ams' |
15 | | - }, |
16 | | - svg: { |
17 | | - fontCache: 'global' |
18 | | - } |
19 | | -}; |
| 1 | +var BbMath = window.BbMath || {}; |
20 | 2 |
|
21 | | -(function() { |
22 | | - var script = document.createElement('script'); |
23 | | - script.src = 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js'; |
24 | | - script.async = true; |
25 | | - document.head.appendChild(script); |
26 | | -})(); |
| 3 | +!function($, window, document, _undefined) |
| 4 | +{ |
| 5 | + "use strict"; |
27 | 6 |
|
28 | | -var retypesetDisabled = false; |
| 7 | + BbMath.MathJax = XF.create({ |
| 8 | + options: { |
| 9 | + mathjax: { |
| 10 | + loader: { |
| 11 | + load: ['ui/safe'], |
| 12 | + }, |
| 13 | + enableMenu: false, |
| 14 | + tex: { |
| 15 | + inlineMath: [['$$\\(', '$$\\)']], |
| 16 | + displayMath: [['$$\\[', '$$\\]']], |
| 17 | + processEscapes: false, |
| 18 | + processRefs: true, |
| 19 | + processEnvironments: false, |
| 20 | + tags: 'ams', |
| 21 | + }, |
| 22 | + svg: { |
| 23 | + fontCache: 'global', |
| 24 | + }, |
| 25 | + }, |
| 26 | + mathjaxUrl: 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js' |
| 27 | + }, |
29 | 28 |
|
30 | | -function retypesetMathjax() |
31 | | -{ |
32 | | - $(this).off('DOMSubtreeModified', retypesetMathjax); |
33 | | - if (retypesetDisabled) { |
34 | | - setTimeout(retypesetMathjax, 500); |
35 | | - return; |
36 | | - } |
37 | | - retypesetDisabled = true; |
38 | | - $(this).on('DOMSubtreeModified', retypesetMathjax); |
39 | | - window.MathJax.typesetPromise().then(() => { |
40 | | - retypesetDisabled = false; |
41 | | - }).catch((err) => console.log(err.message)); |
42 | | -} |
| 29 | + __construct: function(options) { |
| 30 | + window.MathJax = this.options.mathjax; |
| 31 | + }, |
| 32 | + |
| 33 | + load: function() { |
| 34 | + XF.loadScript(this.options.mathjaxUrl, XF.proxy(this, 'loadSuccess')); |
| 35 | + }, |
43 | 36 |
|
44 | | -$(window).on('load', function() { |
45 | | - $('article.message, article.resourceBody-main, blockquote.message-body').each(function() { |
46 | | - $(this).on('DOMSubtreeModified', retypesetMathjax); |
| 37 | + loadSuccess: function() { |
| 38 | + $(document).on('xf:layout', XF.proxy(this, 'retypeset')); |
| 39 | + }, |
| 40 | + |
| 41 | + retypeset: function() { |
| 42 | + MathJax.startup.promise = MathJax.startup.promise |
| 43 | + .then(() => MathJax.typesetPromise()) |
| 44 | + .catch((err) => console.log('MathJax typeset failed: ' + err.message)); |
| 45 | + return MathJax.startup.promise; |
| 46 | + }, |
| 47 | + }); |
| 48 | + |
| 49 | + $(document).on('xf:page-load-complete', function() { |
| 50 | + var mathjax = new BbMath.MathJax(); |
| 51 | + mathjax.load(); |
47 | 52 | }); |
48 | | -}); |
| 53 | +} |
| 54 | +(jQuery, window, document); |
0 commit comments