Skip to content

Commit 7840c7b

Browse files
committed
Editor: load default sketch directly, no iframe needed for default
1 parent d65710b commit 7840c7b

1 file changed

Lines changed: 30 additions & 4 deletions

File tree

editor/index.html

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,17 @@
218218

219219
function stopSketch() {
220220
const area = document.getElementById('preview-area');
221+
// Remove iframe if present
221222
const iframe = area.querySelector('iframe');
222223
if (iframe) { try{URL.revokeObjectURL(iframe.src);}catch(e){} iframe.remove(); }
224+
// Remove direct canvas if present
225+
const canvas = area.querySelector('canvas');
226+
if (canvas) canvas.remove();
227+
// Cancel module if running
228+
if (window.Module) {
229+
try { if(window.Module._emscripten_cancel_main_loop) window.Module._emscripten_cancel_main_loop(); } catch(e){}
230+
window.Module = undefined;
231+
}
223232
const ph = document.getElementById('preview-placeholder');
224233
if (ph) ph.style.display = '';
225234
setStatus('');
@@ -228,12 +237,12 @@
228237

229238
// Build self-contained iframe HTML for a compiled sketch
230239
function makeSketchHTML(jsUrl, wasmB64, dataB64) {
231-
return '<!DOCTYPE html><html><head><style>*{margin:0;padding:0;overflow:hidden}body{background:#000}canvas{display:block;width:100vw;height:100vh}<\/style><\/head><body><canvas id="canvas"><\/canvas><script>(function(){var w=atob("'+wasmB64+'"),wa=new Uint8Array(w.length);for(var i=0;i<w.length;i++)wa[i]=w.charCodeAt(i);var d=atob("'+dataB64+'"),da=new Uint8Array(d.length);for(var i=0;i<d.length;i++)da[i]=d.charCodeAt(i);window.Module={canvas:document.getElementById("canvas"),wasmBinary:wa,getPreloadedPackage:function(){return da.buffer;},onRuntimeInitialized:function(){parent.postMessage("running","*");},print:console.log,printErr:console.warn};})();<\/script><script src="'+jsUrl+'"><\/script><\/body><\/html>';
240+
return '<!DOCTYPE html><html><head><style>*{margin:0;padding:0;overflow:hidden}body{background:#000;display:flex;align-items:center;justify-content:center;height:100vh}canvas{display:block}<\/style><\/head><body><canvas id="canvas"><\/canvas><script>(function(){var w=atob("'+wasmB64+'"),wa=new Uint8Array(w.length);for(var i=0;i<w.length;i++)wa[i]=w.charCodeAt(i);var d=atob("'+dataB64+'"),da=new Uint8Array(d.length);for(var i=0;i<d.length;i++)da[i]=d.charCodeAt(i);window.Module={canvas:document.getElementById("canvas"),wasmBinary:wa,getPreloadedPackage:function(){return da.buffer;},onRuntimeInitialized:function(){parent.postMessage("running","*");},print:console.log,printErr:console.warn};})();<\/script><script src="'+jsUrl+'"><\/script><\/body><\/html>';
232241
}
233242

234243
function makeDefaultHTML() {
235244
const base = location.origin + '/editor/';
236-
return '<!DOCTYPE html><html><head><style>*{margin:0;padding:0;overflow:hidden}body{background:#000}canvas{display:block;width:100vw;height:100vh}<\/style><\/head><body><canvas id="canvas"><\/canvas><script>window.Module={canvas:document.getElementById("canvas"),onRuntimeInitialized:function(){parent.postMessage("running","*");},print:console.log,printErr:console.warn};<\/script><script src="'+base+'default_sketch.js"><\/script><\/body><\/html>';
245+
return '<!DOCTYPE html><html><head><style>*{margin:0;padding:0;overflow:hidden}body{background:#000;display:flex;align-items:center;justify-content:center;height:100vh}canvas{display:block}<\/style><\/head><body><canvas id="canvas"><\/canvas><script>window.Module={canvas:document.getElementById("canvas"),onRuntimeInitialized:function(){parent.postMessage("running","*");},print:console.log,printErr:console.warn};<\/script><script src="'+base+'default_sketch.js"><\/script><\/body><\/html>';
237246
}
238247

239248
function launchIframe(html) {
@@ -253,8 +262,25 @@
253262
});
254263

255264
window.addEventListener('load', () => {
256-
launchIframe(makeDefaultHTML());
257-
setStatus('Running', 'ok');
265+
// Load default sketch directly in the preview area (no iframe needed)
266+
// This avoids blob URL cross-origin issues with external scripts
267+
const area = document.getElementById('preview-area');
268+
const ph = document.getElementById('preview-placeholder');
269+
if (ph) ph.style.display = 'none';
270+
const canvas = document.createElement('canvas');
271+
canvas.id = 'canvas';
272+
canvas.style.display = 'block';
273+
canvas.style.margin = 'auto';
274+
area.appendChild(canvas);
275+
window.Module = {
276+
canvas: canvas,
277+
onRuntimeInitialized: function() { setStatus('Running', 'ok'); },
278+
print: console.log,
279+
printErr: console.warn,
280+
};
281+
const script = document.createElement('script');
282+
script.src = 'default_sketch.js';
283+
document.head.appendChild(script);
258284
});
259285

260286
async function runSketch() {

0 commit comments

Comments
 (0)