js-canvas-rendering-context-2d 0.3.0

A library meant to be a zero dependency wrapper for the CanvasRenderingContext2D web api for use in WASM rust applications.
Documentation
<html>
    <head>
        <style>
            .example-container{
                border-style:solid;
                border-width: thin;
                border-color:#AAA;
                border-radius: 2%;
                margin: 1ex;
                padding: 1ex;
            }
            .example-container > canvas {
                border-style: solid;
                border-width: thin;
                border-color: #AAA;
            }
        </style>
    </head>
    <body style="margin:0; overflow-y: hidden; overflow-x: hidden;">
        <h1>Examples</h1>
        <div id="examples" style="display:flex;flex-wrap: wrap; margin-left: 3ex; margin-right: 3ex;">
            <div id="exampleBigM" class="example-container">
                <h3>Big M</h3>
                <canvas id="canvasBigM" class="example-canvas" data-wasm-path="target/wasm32-unknown-unknown/debug/examples/big-m.wasm"></canvas>
            </div>
            <div id="exampleMultiColorCircles" class="example-container">
                <h3>Multi-Color Circles</h3>
                <canvas id="canvasMultiColorCircles" class="example-canvas" data-wasm-path="target/wasm32-unknown-unknown/debug/examples/multi-color-circles.wasm"></canvas>
            </div>
            <div id="exampleLineCaps" class="example-container">
                <h3>Line Caps</h3>
                <canvas id="canvasLineCaps" class="example-canvas" data-wasm-path="target/wasm32-unknown-unknown/debug/examples/line-caps.wasm"></canvas>
            </div>
            <div id="exampleLineJoins" class="example-container">
                <h3>Line Joins</h3>
                <canvas id="canvasLineJoins" class="example-canvas" data-wasm-path="target/wasm32-unknown-unknown/debug/examples/line-joins.wasm"></canvas>
            </div>
            <div id="exampleFillStyle" class="example-container">
                <h3>Fill Style</h3>
                <canvas id="canvasFillStyle" class="example-canvas" data-wasm-path="target/wasm32-unknown-unknown/debug/examples/fill-style.wasm"></canvas>
            </div>
            <div id="exampleClearRect" class="example-container">
                <h3>Clear Rect</h3>
                <canvas id="canvasClearRect" class="example-canvas" data-wasm-path="target/wasm32-unknown-unknown/debug/examples/clear-rect.wasm"></canvas>
            </div>
            <div id="exampleGameOfLife" class="example-container">
                <h3>Game of Life</h3>
                <canvas id="canvasGameOfLife" class="example-canvas implements-tick" data-wasm-path="target/wasm32-unknown-unknown/debug/examples/game-of-life.wasm"></canvas>
            </div>
            <div id="exampleShadowBoxes" class="example-container">
                <h3>Shadow Boxes</h3>
                <canvas id="canvasShadowBoxes" class="example-canvas" data-wasm-path="target/wasm32-unknown-unknown/debug/examples/shadow-boxes.wasm"></canvas>
            </div>
        </div>
        <script src="rust.wasm.canvasrenderingcontext2d.js"></script>
        <script>
            let manager = rust.wasm.canvasRenderingContext2DManager;

            let examples = document.getElementsByClassName('example-canvas');
            let lastTick = Date.now();
            for(let i = 0; i < examples.length; i++){
                let local = examples[i];
                let wasmPath = local.getAttributeNode('data-wasm-path').value;
                let handlers = {
                    onInit: (result) => result.instance.exports.main(),
                    onResize: (result) => result.instance.exports.draw()
                };

                if(local.classList.contains('implements-tick')){
                    handlers.onAnimate = (result) => {
                        let current = Date.now();
                        if((current - lastTick) > 100){
                            result.instance.exports.tick();
                            lastTick = current;
                        }
                        result.instance.exports.draw();
                    };
                }

                let localContext = manager.addContext(local.id,wasmPath,handlers);

                localContext.init();
            }

        </script>
    </body>
</html>