From d283f7e661e14d6ae1881fe803e5b4f1ed0689ff Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 24 Jun 2024 13:49:08 -0400 Subject: Add 2024 Guix social talk. --- .../reveal.js/plugin/math/mathjax3.js | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 2024-06-18-guix-social/reveal.js/plugin/math/mathjax3.js (limited to '2024-06-18-guix-social/reveal.js/plugin/math/mathjax3.js') diff --git a/2024-06-18-guix-social/reveal.js/plugin/math/mathjax3.js b/2024-06-18-guix-social/reveal.js/plugin/math/mathjax3.js new file mode 100644 index 0000000..767129c --- /dev/null +++ b/2024-06-18-guix-social/reveal.js/plugin/math/mathjax3.js @@ -0,0 +1,77 @@ +/** + * 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(() => { + deck.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 = {...defaultOptions.options, ...revealOptions.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 + deck.addEventListener( 'slidechanged', function( event ) { + MathJax.typeset(); + } ); + } ); + + } + } + +}; -- cgit v1.2.3