78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * A plugin which enables rendering of math equations inside
 | 
						|
 * of reveal.js slides. Essentially a thin wrapper for MathJax 3
 | 
						|
 *
 | 
						|
 * @author Hakim El Hattab
 | 
						|
 * @author Gerhard Burger
 | 
						|
 */
 | 
						|
export const MathJax3 = () => {
 | 
						|
 | 
						|
    // The reveal.js instance this plugin is attached to
 | 
						|
    let deck;
 | 
						|
 | 
						|
    let defaultOptions = {
 | 
						|
        tex: {
 | 
						|
            inlineMath: [ [ '$', '$' ], [ '\\(', '\\)' ]  ]
 | 
						|
        },
 | 
						|
        options: {
 | 
						|
            skipHtmlTags: [ 'script', 'noscript', 'style', 'textarea', 'pre' ]
 | 
						|
        },
 | 
						|
        startup: {
 | 
						|
            ready: () => {
 | 
						|
                MathJax.startup.defaultReady();
 | 
						|
                MathJax.startup.promise.then(() => {
 | 
						|
                    Reveal.layout();
 | 
						|
                });
 | 
						|
            }
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    function loadScript( url, callback ) {
 | 
						|
 | 
						|
        let script = document.createElement( 'script' );
 | 
						|
        script.type = "text/javascript"
 | 
						|
        script.id = "MathJax-script"
 | 
						|
        script.src = url;
 | 
						|
        script.async = true
 | 
						|
 | 
						|
        // Wrapper for callback to make sure it only fires once
 | 
						|
        script.onload = () => {
 | 
						|
            if (typeof callback === 'function') {
 | 
						|
                callback.call();
 | 
						|
                callback = null;
 | 
						|
            }
 | 
						|
        };
 | 
						|
 | 
						|
        document.head.appendChild( script );
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    return {
 | 
						|
        id: 'mathjax3',
 | 
						|
        init: function(reveal) {
 | 
						|
 | 
						|
            deck = reveal;
 | 
						|
 | 
						|
            let revealOptions = deck.getConfig().mathjax3 || {};
 | 
						|
            let options = {...defaultOptions, ...revealOptions};
 | 
						|
            options.tex = {...defaultOptions.tex, ...revealOptions.tex}
 | 
						|
            options.options = {...options.options, ...defaultOptions.options}
 | 
						|
            options.startup = {...defaultOptions.startup, ...revealOptions.startup}
 | 
						|
 | 
						|
            let url = options.mathjax || 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js';
 | 
						|
            options.mathjax = null;
 | 
						|
 | 
						|
            window.MathJax = options;
 | 
						|
 | 
						|
            loadScript( url, function() {
 | 
						|
                // Reprocess equations in slides when they turn visible
 | 
						|
                Reveal.addEventListener( 'slidechanged', function( event ) {
 | 
						|
                    MathJax.typeset();
 | 
						|
                } );
 | 
						|
            } );
 | 
						|
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
};
 |