github.com/mweagle/Sparta@v1.15.0/docs_source/static/presentations/reveal.js-3.9.2/plugin/math/math.js (about)

     1  /**
     2   * A plugin which enables rendering of math equations inside
     3   * of reveal.js slides. Essentially a thin wrapper for MathJax.
     4   *
     5   * @author Hakim El Hattab
     6   */
     7  var RevealMath = window.RevealMath || (function(){
     8  
     9  	var options = Reveal.getConfig().math || {};
    10  	var mathjax = options.mathjax || 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js';
    11  	var config = options.config || 'TeX-AMS_HTML-full';
    12  	var url = mathjax + '?config=' + config;
    13  
    14  	var defaultOptions = {
    15  		messageStyle: 'none',
    16  		tex2jax: {
    17  			inlineMath: [ [ '$', '$' ], [ '\\(', '\\)' ] ],
    18  			skipTags: [ 'script', 'noscript', 'style', 'textarea', 'pre' ]
    19  		},
    20  		skipStartupTypeset: true
    21  	};
    22  
    23  	function defaults( options, defaultOptions ) {
    24  
    25  		for ( var i in defaultOptions ) {
    26  			if ( !options.hasOwnProperty( i ) ) {
    27  				options[i] = defaultOptions[i];
    28  			}
    29  		}
    30  
    31  	}
    32  
    33  	function loadScript( url, callback ) {
    34  
    35  		var head = document.querySelector( 'head' );
    36  		var script = document.createElement( 'script' );
    37  		script.type = 'text/javascript';
    38  		script.src = url;
    39  
    40  		// Wrapper for callback to make sure it only fires once
    41  		var finish = function() {
    42  			if( typeof callback === 'function' ) {
    43  				callback.call();
    44  				callback = null;
    45  			}
    46  		}
    47  
    48  		script.onload = finish;
    49  
    50  		// IE
    51  		script.onreadystatechange = function() {
    52  			if ( this.readyState === 'loaded' ) {
    53  				finish();
    54  			}
    55  		}
    56  
    57  		// Normal browsers
    58  		head.appendChild( script );
    59  
    60  	}
    61  
    62  	return {
    63  		init: function() {
    64  
    65  			defaults( options, defaultOptions );
    66  			defaults( options.tex2jax, defaultOptions.tex2jax );
    67  			options.mathjax = options.config = null;
    68  
    69  			loadScript( url, function() {
    70  
    71  				MathJax.Hub.Config( options );
    72  
    73  				// Typeset followed by an immediate reveal.js layout since
    74  				// the typesetting process could affect slide height
    75  				MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub ] );
    76  				MathJax.Hub.Queue( Reveal.layout );
    77  
    78  				// Reprocess equations in slides when they turn visible
    79  				Reveal.addEventListener( 'slidechanged', function( event ) {
    80  
    81  					MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, event.currentSlide ] );
    82  
    83  				} );
    84  
    85  			} );
    86  
    87  		}
    88  	}
    89  
    90  })();
    91  
    92  Reveal.registerPlugin( 'math', RevealMath );