docs: public static Element svgWaitIcon(Document document, double x, double y, double w, double h) {
      Element g = SVGUtil.svgElement(document, SVGConstants.SVG_G_TAG);
      setAtt(g, SVGConstants.SVG_TRANSFORM_ATTRIBUTE, "translate(" + x + " " + y + ") scale(" + w + " " + h + ")");
      Element thro = SVGUtil.svgElement(document, SVGConstants.SVG_PATH_TAG);
      setAtt(thro, SVGConstants.SVG_D_ATTRIBUTE, THROBBER_PATH);
      setStyle(thro, THROBBER_STYLE);
      Element anim = SVGUtil.svgElement(document, SVGConstants.SVG_ANIMATE_TRANSFORM_TAG);
      setAtt(anim, SVGConstants.SVG_ATTRIBUTE_NAME_ATTRIBUTE, SVGConstants.SVG_TRANSFORM_ATTRIBUTE);
      setAtt(anim, SVGConstants.SVG_ATTRIBUTE_TYPE_ATTRIBUTE, "XML");
      setAtt(anim, SVGConstants.SVG_TYPE_ATTRIBUTE, SVGConstants.SVG_ROTATE_ATTRIBUTE);
      setAtt(anim, SVGConstants.SVG_FROM_ATTRIBUTE, "0 .5 .5");
      setAtt(anim, SVGConstants.SVG_TO_ATTRIBUTE, "360 .5 .5");
      setAtt(anim, SVGConstants.SVG_BEGIN_ATTRIBUTE, fmt(Math.random() * 2) + "s");
      setAtt(anim, SVGConstants.SVG_DUR_ATTRIBUTE, "2s");
      setAtt(anim, SVGConstants.SVG_REPEAT_COUNT_ATTRIBUTE, "indefinite");
      setAtt(anim, SVGConstants.SVG_FILL_ATTRIBUTE, "freeze");
      thro.appendChild(anim);
      g.appendChild(thro);
      return g;
    }