shithub: puzzles

Download patch

ref: 208e2508d3ba459d32e31661a0fa9d1b4707dd0e
parent: 4e3bb8f257f711c785498644a5c39d6c5d21dc87
author: Ben Harris <bjh21@bjh21.me.uk>
date: Sat Nov 12 10:03:40 EST 2022

js: Add a way to have environment variables

They can now be specified by sticking some JSON in a <script> element in
the Web page:

<script id="environment" type="application/json">
   { "LOOPY_DEFAULT": "20x10t11dh" }
</script>

This isn't brilliantly useful, but it does allow for changing settings
without recompiling.

--- a/emccpre.js
+++ b/emccpre.js
@@ -548,6 +548,19 @@
         rescale_puzzle();
     }
 
+    Module.preRun = function() {
+        // Merge environment variables from HTML script element.
+        // This means you can add something like this to the HTML:
+        // <script id="environment" type="application/json">
+        //   { "LOOPY_DEFAULT": "20x10t11dh" }
+        // </script>
+        var envscript = document.getElementById("environment");
+        if (envscript !== null)
+            for (var [k, v] of
+                 Object.entries(JSON.parse(envscript.textContent)))
+                ENV[k] = v;
+    };
+
     Module.onRuntimeInitialized = function() {
         // Run the C setup function, passing argv[1] as the fragment
         // identifier (so that permalinks of the form puzzle.html#game-id