import init, {init_pteropus} from '../pkg/pteropus.js'; function fileDragOverHandler(event) { event.preventDefault(); } async function run() { await init(); let pteropus = await init_pteropus(); let test_file_data = null; let needs_resize = true; let clear_scene = false; let mainCanvas = document.getElementById("pteropus-canvas"); mainCanvas.addEventListener("drop", async (event) => { event.preventDefault(); test_file_data = event.dataTransfer.files[0] }); mainCanvas.addEventListener("dragover", fileDragOverHandler); const resizeObserver = new ResizeObserver((entries) => { needs_resize = true; }); resizeObserver.observe(mainCanvas); let fileUploadButton = document.getElementById("file-upload-file-input"); fileUploadButton.addEventListener("change", () => { const files = fileUploadButton.files; if(files.length > 0) { test_file_data = files[0] } }); let clearSceneButton = document.getElementById("clear-scene-button"); clearSceneButton.addEventListener("click", () => { clear_scene = true; }); [ { buttonId: "load-small-sample-button", url: "small_sample.tiff" }, { buttonId: "load-medium-sample-button", url: "medium_sample.tiff" }, { buttonId: "load-large-sample-button", url: "large_sample.tiff" } ].forEach( (sample) => { let loadSampleButton = document.getElementById(sample.buttonId); loadSampleButton.addEventListener("click", async () => { const response = await fetch(sample.url); if(!response.ok) { console.error("Couild not load sample file.") } test_file_data = await response.blob() }); }); while(true) { await pteropus.render(); if(needs_resize) { await pteropus.on_resize(); needs_resize = false; } if(clear_scene) { await pteropus.clear_scene(); clear_scene = false; } // TODO: I really want to do this asynchronously, with the drop // event listener calling pteropus_load_file directly, but I need // to figure out how to get that to work. if(test_file_data) { await pteropus.load_file(test_file_data); test_file_data = null } await new Promise(requestAnimationFrame); } } run();