diff options
author | Hakim El Hattab | 2013-08-20 20:14:22 -0700 |
---|---|---|
committer | Hakim El Hattab | 2013-08-20 20:14:22 -0700 |
commit | 4164200474e2af27803dc7683054f5443743c8a9 (patch) | |
tree | 40dbf6bcb8ef828c060cd39adff0589e6d7822c9 /plugin/math/math.js | |
parent | cb26ff62112df74beb6ade2b4d3721d965f09c5d (diff) | |
parent | 2da7c3eacfcd7cc59d9cdee97087b0e2feca625e (diff) |
Merge pull request #567 from hakimel/dev
2.5.0
Diffstat (limited to 'plugin/math/math.js')
-rwxr-xr-x | plugin/math/math.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/plugin/math/math.js b/plugin/math/math.js new file mode 100755 index 0000000..d55d9d1 --- /dev/null +++ b/plugin/math/math.js @@ -0,0 +1,64 @@ +/** + * A plugin which enables rendering of math equations inside + * of reveal.js slides. Essentially a thin wrapper for MathJax. + * + * @author Hakim El Hattab + */ +var RevealMath = window.RevealMath || (function(){ + + var options = Reveal.getConfig().math || {}; + options.mathjax = options.mathjax || 'http://cdn.mathjax.org/mathjax/latest/MathJax.js'; + options.config = options.config || 'TeX-AMS_HTML-full'; + + loadScript( options.mathjax + '?config=' + options.config, function() { + + MathJax.Hub.Config({ + messageStyle: 'none', + tex2jax: { inlineMath: [['$','$'],['\\(','\\)']] }, + skipStartupTypeset: true + }); + + // Typeset followed by an immediate reveal.js layout since + // the typesetting process could affect slide height + MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub ] ); + MathJax.Hub.Queue( Reveal.layout ); + + // Reprocess equations in slides when they turn visible + Reveal.addEventListener( 'slidechanged', function( event ) { + + MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, event.currentSlide ] ); + + } ); + + } ); + + function loadScript( url, callback ) { + + var head = document.querySelector( 'head' ); + var script = document.createElement( 'script' ); + script.type = 'text/javascript'; + script.src = url; + + // Wrapper for callback to make sure it only fires once + var finish = function() { + if( typeof callback === 'function' ) { + callback.call(); + callback = null; + } + } + + script.onload = finish; + + // IE + script.onreadystatechange = function() { + if ( this.readyState === 'loaded' ) { + finish(); + } + } + + // Normal browsers + head.appendChild( script ); + + } + +})(); |