JSFiddle - React, Tailwind, and code Playground

HTML

<body>
  <pre>
  <input type="button" id="downloadButton" value="Download this G-code" >
    <div id="spring"></div>
  </pre>
</body>

JavaScript

"use strict"

// Helper functions to shim java library calls into javascript.
var outg = {
  outstring: "",
  println: function (str) {
    this.outstring += str + "\r\n";
  }
};

// Simple replacement for String.Format that only replaces float entities with js text representations of variables (truncated)
var String = {
  format: function (instr, ...vals) {
    for (var curr = 0; curr < vals.length; curr++) {
      var curstr = curr == 0 ? '' : curr + 1;
      var replaceStr = "%" + curstr + "f";
      var value = "" + vals[curr];
      var dotPos = value.indexOf('.');
      if (dotPos != -1) {
        instr = instr.replace(replaceStr, value.substring(0, dotPos + 7));
      } else {
        instr = instr.replace(replaceStr, value);
      }
    }
    return instr;
  },
  printf: function (fstring, ...vals) {
    outg.println(String.format(fstring, ...vals));
  }
};

var jsMath = {
  toRadians: function (val) {
    return val * Math.PI / 180;
  }
};

var MagicSpring = {};
MagicSpring.fn = { ancestor: MagicSpring };

MagicSpring.fn.download = function(){
    var a = document.body.appendChild(
        document.createElement("a")
    );
    a.download = "spring.gcode";
    a.href = "data:text/plain," + document.getElementById("spring").innerHTML; // Grab the HTML
    a.click(); // Trigger a click on the element
}

MagicSpring.fn.iteration2 = function (i, xf, p, sel) {
  p.angle = p.delta * i;
  p.x2 = Math.cos(jsMath.toRadians(p.angle)) * sel;
  p.y2 = Math.sin(jsMath.toRadians(p.angle)) * sel;
  p.x2 += p.xo;
  p.y2 += p.yo;
  p.z2 = p.z1 + (p.lh / (360 / p.delta));
  p.dx = p.x2 - p.x1;
  p.dy = p.y2 - p.y1;
  p.dz = p.z2 - p.z1;
  p.de = p.extr * xf(i, p) * (Math.sqrt(p.dx * p.dx + p.dy * p.dy + p.dz * p.dz));
  p.e += p.de;
  String.printf("G1 X%f Y%2f Z%3f E%4f", p.x2, p.y2, p.z2, p.e);
  p.x1 = p.x2; p.y1 = p.y2; p.z1 = p.z2;
}

MagicSpring.fn.iteration = function (i, xf, p) {
  MagicSpring.fn.iteration2(i, xf, p, p.or);
  i++;
  MagicSpring.fn.iteration2(i,...