JSFiddle - React, Tailwind, and code Playground

HTML

<div id="container">

</div>

<button onclick="foo()">Append image</button>

JavaScript

function foo()
{
			var circle = getStateCircle("opened");
      //var gl = circle.getContext("webgl", { preserveDrawingBuffer: true });
      var dataUrl = circle.toDataURL("image/png");
      
      var img = document.createElement("img");
      img.src = dataUrl;
      document.getElementById("container").appendChild(img);
}



function getStateCircle(state)
{
                var stateCircle;

                if(state === "opened")
                {
                    stateCircle = new Circle("#ffcc00", "20px");
                }

                else if(state === "accepted")
                {
                    stateCircle = new Circle("#33cc33", "20px");
                }

                else if (state === "refused")
                {
                    stateCircle = new Circle("#ff3300", "20px");
                }

                else if (state === "closed")
                {
                    stateCircle = new Circle("black", "20px");
                }

                else
                {
                    throw new Error("The state of the offer is unknown");
                }
                    
                stateCircle.buildCircle();
                var circle = stateCircle.getCircle();
                

                return circle;
}

function Circle(color, size)
{
    this._color = color;
    this._size = size;

    this._circle;

    this.buildCircle = function()
    {
        var style = {
            borderRadius: "50%",
            backgroundColor: this._color,
            height: this._size,
            width: this._size
        }

        this._circle = new ElementBuilder("canvas").withStyleObject(style).getElement();
    }

    this.buildCircleAndAppendTo = function(father)
    {
        this._buildCircle();
        father.appendChild(this._circle);
    }

    this.getCircle = function()
    {
        return this._circle;
    }
}

function ElementBuilder(elementName) {
    var This = this;
    this.element =...