Skip to content

Commit 27299a1

Browse files
committed
Webcomponent to ease integration in HTML
1 parent 56aef62 commit 27299a1

File tree

2 files changed

+27
-10
lines changed

2 files changed

+27
-10
lines changed

index.html

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,20 @@ <h1>Olive.c Demos</h1>
1212

1313
<h2 id="demo-triangle"><a href="#demo-triangle">Triangle</a></h2>
1414
<p>Rainbow triangle together with a transparent circle. Source:&nbsp;<a href="https://github.com/tsoding/olive.c/blob/master/demos/triangle.c">demos/triangle.c</a></p>
15-
<canvas id="app-triangle"></canvas>
15+
<olivec-canvas src="wasm/triangle.wasm"></olivec-canvas>
1616

1717
<h2 id="demo-3d"><a href="#demo-3d">3D</a></h2>
1818
<p>A bunch of 3D points projected onto your 2D screen plus a text with a builtin monospaced font. Source:&nbsp;<a href="https://github.com/tsoding/olive.c/blob/master/demos/3d.c">demos/3d.c</a></p>
19-
<canvas id="app-3d"></canvas>
19+
<olivec-canvas src="wasm/3d.wasm"></olivec-canvas>
2020

2121
<h2 id="demo-squish"><a href="#demo-squish">Squish</a></h2>
2222
<p>Resizing images on the fly. Source:&nbsp;<a href="https://github.com/tsoding/olive.c/blob/master/demos/squish.c">demos/squish.c</a></p>
23-
<canvas id="app-squish"></canvas>
23+
<olivec-canvas src="wasm/squish.wasm"></olivec-canvas>
2424

2525
<h2 id="demo-triangle3d"><a href="#demo-triangle3d">Triangle 3D</a></h2>
2626
Rotating rainbow triangle in 3D. Unlike <a href="#demo-3d">3D dots above</a> this is a solid shape. Source:&nbsp;<a href="https://github.com/tsoding/olive.c/blob/master/demos/triangle3d.c">demos/triangle3d.c</a></p>
27-
<canvas id="app-triangle3d"></canvas>
27+
<olivec-canvas src="wasm/triangle3d.wasm"></olivec-canvas>
2828

2929
<script src="js/vc.js"></script>
30-
<script>
31-
startDemo("app-triangle", "./wasm/triangle.wasm");
32-
startDemo("app-3d", "./wasm/3d.wasm");
33-
startDemo("app-squish", "./wasm/squish.wasm");
34-
startDemo("app-triangle3d", "./wasm/triangle3d.wasm");
35-
</script>
3630
</body>
3731
</html>

js/vc.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ async function startDemo(elementId, wasmPath) {
4545
console.error(`Could not find element ${elementId}. Skipping demo ${wasmPath}...`);
4646
return;
4747
}
48+
loadApp(app, wasmPath);
49+
}
4850

51+
async function loadApp(app, wasmPath) {
4952
const ctx = app.getContext("2d");
5053
const w = await WebAssembly.instantiateStreaming(fetch(wasmPath), {
5154
"env": make_environment(libm)
@@ -79,3 +82,23 @@ async function startDemo(elementId, wasmPath) {
7982
}
8083
window.requestAnimationFrame(first);
8184
}
85+
86+
class OliveCanvas extends HTMLElement {
87+
constructor() {
88+
super();
89+
}
90+
91+
connectedCallback() {
92+
const wasmPath = this.getAttribute('src');
93+
if (!wasmPath) {
94+
console.error(`Should define a src attribute on olive-canvas`)
95+
return;
96+
}
97+
98+
const canvas = document.createElement("canvas");
99+
this.appendChild(canvas);
100+
loadApp(canvas, wasmPath);
101+
}
102+
}
103+
104+
customElements.define("olivec-canvas", OliveCanvas);

0 commit comments

Comments
 (0)