<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>32blit examples</title>
        <style>
        body {
            font-family: sans-serif;
            margin: 0;
            padding: 0;
        }

        #example-list {
            display: flex;
            flex-wrap: wrap;
            align-items: stretch;
            margin: 1em auto;
            max-width: 1280px;

        }

        #example-list button {
            border: none;
            background: #222;
            color: #f7f7f7;

            padding: 1em;
            margin: 0.2em;
            flex: 1 0;
            white-space: nowrap;
        }

        iframe {
            border: 0;
            margin: auto;
            display: block;
            width: 640px;
            height: 480px;
        }
        </style>
    </head>
    <body>
        <section id="example-list"></section>
        <iframe id="example-frame" src="shell.html?app=logo"></iframe>
        <script type="text/javascript">
            const examples = [
                "audio-test", "audio-wave", "doom-fire", "fizzlefade", "flight", "geometry", "hardware-test", "logo", 
                "matrix-test", "metadata-test", "mp3", "palette-cycle", "palette-swap", "particle", "piano", "platformer", 
		"profiler-test", "raycaster", "rotozoom", "saves", "scrolly-tile", "serial-debug", "shmup", "sprite-test", 
		"text", "tilemap-test", "tilt", "timer-test", "tunnel", "tween-demo", "tween-test", "voxel", "waveform-demo"
            ];

            const listEl = document.getElementById("example-list");
            const frameEl = document.getElementById("example-frame");

            frameEl.addEventListener("load", e => {
                // hack to give iframe keyboard
                const frame = e.target;
                const canvas = frame.contentDocument.getElementById("canvas");
                canvas.addEventListener("mousedown", () => frame.contentWindow.focus());
            });

            for(const example of examples)
            {
                const el = document.createElement("button");
                el.innerText = example;
                el.addEventListener("click", e => {
                    frameEl.src = `shell.html?app=${example}`
                    frameEl.contentWindow.focus();
                });

                listEl.appendChild(el);
            }
        </script>
    </body>
</html>
