fix(web): boot KiCad WASM in-document (no iframe) and fix eeschema frame sizing
Replace the same-origin iframe in WasmTool with a direct in-document boot (src/wasm/boot.ts): build the global Emscripten Module + preRun steps and inject wx.js + <tool>.js into the page, the same artifacts the e2e harness uses. The build is non-modularized (global Module/FS) and pthread-based, so locateFile/mainScriptUrlOrBlob are set so the wasm + worker load regardless of the SPA route, and only one tool runs per page load. Two bugs found during in-browser verification: - This build does not export Module.FS (touching it aborts); use the global window.FS like the harness does. - The wasm reads top-level frame geometry from a global `mainWindow` (offsetWidth/offsetHeight/offsetTop), falling back to a hardcoded 1280x720 when undefined. The harness sets it via `var mainWindow = ...`; we must too, or the frame mismatches the viewport and the whole AUI layout breaks (missing toolbars, transparent/ghosted panels). Expose the #main-window element as window.mainWindow. Verified: eeschema renders the full UI (menus, toolbars, panels, schematic) matching the e2e baseline. pcbnew remains pre-existing-broken at the build level (raw pcbnew.html harness is equally broken: empty registry, dynCall "ii signature" errors), independent of this change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
18a9de0449
commit
83462f7090
8 changed files with 311 additions and 75 deletions
|
|
@ -66,10 +66,15 @@ them at `/wasm` (same origin). `VITE_WASM_ASSET_BASE_URL` defaults to `/wasm`.
|
|||
- If the tool won't load, the target dir is probably empty — run
|
||||
`tests/scripts/setup-kicad-wasm.sh` to populate `tests/apps/kicad/`.
|
||||
|
||||
The tool view (`WasmTool.tsx`) loads the **actual harness** (`/wasm/<tool>.html`,
|
||||
the same page the e2e tests use) in a same-origin iframe, then injects the
|
||||
project tree into its MEMFS and drives File→Open — reusing the proven loader
|
||||
rather than re-implementing the Emscripten bootstrap.
|
||||
The tool view (`WasmTool.tsx` + `src/wasm/boot.ts`) boots the tool **directly in
|
||||
the React document** — no iframe. It replicates the proven harness HTML
|
||||
(`tests/apps/kicad/<tool>.html`): builds the same global Emscripten `Module`
|
||||
config and preRun steps (create canvas, write `images.tar.gz`, seed config), then
|
||||
injects the same `wx.js` + `<tool>.js` artifacts into the page. It then syncs the
|
||||
project tree into MEMFS and drives File→Open. The build is non-modularized
|
||||
(global `Module`/`FS`) and pthread-based, so only **one** tool runs per page load;
|
||||
switching tools requires a full navigation. `locateFile` resolves the wasm and
|
||||
the pthread worker against `<base>` so they load regardless of the SPA route.
|
||||
|
||||
**prod**: point `VITE_WASM_ASSET_BASE_URL` at a CDN URL — but that origin must
|
||||
itself satisfy the same-origin / COEP constraints (e.g. served under the app's
|
||||
|
|
|
|||
Loading…
Reference in a new issue