summaryrefslogtreecommitdiff
path: root/2024-06-18-guix-social/reveal.js/plugin/math/mathjax3.js
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2024-06-24 13:49:08 -0400
committerDavid Thompson <dthompson2@worcester.edu>2024-06-24 13:52:17 -0400
commitd283f7e661e14d6ae1881fe803e5b4f1ed0689ff (patch)
tree84d3811c6dcb7d7f02aecadad7b2dfacce83bd4f /2024-06-18-guix-social/reveal.js/plugin/math/mathjax3.js
parent3d9dcd3099fb252fa35697148fbbd541eb9eecc9 (diff)
Add 2024 Guix social talk.HEADmaster
Diffstat (limited to '2024-06-18-guix-social/reveal.js/plugin/math/mathjax3.js')
-rw-r--r--2024-06-18-guix-social/reveal.js/plugin/math/mathjax3.js77
1 files changed, 77 insertions, 0 deletions
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();
+ } );
+ } );
+
+ }
+ }
+
+};