mirror of
https://github.com/storytold/wordcraft.git
synced 2026-10-26 11:27:10 -06:00
* web: print straight to the system print dialog, not just export The web build's Print backstage page only let you save a copy in another format — there was no way to actually send the document to a printer short of exporting a PDF and opening it yourself. Add a dedicated Print button that exports to PDF in memory and opens it in a hidden iframe, then calls the iframe's own print() once it has loaded, which is the standard way to drive the browser's native print dialog on a PDF without a download or a popup window. - ui-egui: new Services::print hook (web: hand PDF bytes to the browser's print flow directly, no download). - ui-egui backstage: "Print" button on the Print page when the host implements the hook; goes through wordcraft_engine::io::save_bytes directly rather than the existing save/download command path, since we want raw bytes in memory, not a file write. - wordcraft-web: implement the hook (Blob -> object URL -> hidden iframe -> iframe.contentWindow.print() on load). Desktop builds are unaffected (no Services::print set there, so the button doesn't appear - file.print still opens the Print page as before). * web print: make printing the ui.print command, dispatched by id The backstage Print button now runs `ui.print` instead of exporting and calling the host hook inline, so the control channel, MCP bridge and command search reach the same path. Like ui.openFileDialog it is the one explicit call that opens system UI; without a print hook it is an error. Status strings get rows in all six catalogs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * web print: drop the previous print's iframe and object URL Each Print appended a hidden iframe holding a fresh blob URL of the whole document's PDF and never released it, so copies piled up in the page. The frame now has a fixed id; the next print revokes its URL and removes it first, and a failure part-way through cleans up after itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * web print: test that Print needs the host's print hook ui.print errors without Services::print and hands the hook a PDF with it; a failing hook reports why. The Print page shows the Print button only when the hook is set, and the button prints through the command. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Brandon Thomas <echelon@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
32 lines
1.1 KiB
TOML
32 lines
1.1 KiB
TOML
[package]
|
|
name = "wordcraft-web"
|
|
description = "WordCraft in the browser (eframe web runner, WebGPU with WebGL2 fallback)"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
publish = false
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[[bin]]
|
|
name = "wordcraft-web"
|
|
path = "src/main.rs"
|
|
|
|
[dependencies]
|
|
wordcraft-engine = { workspace = true }
|
|
wordcraft-ui-egui = { workspace = true }
|
|
egui = { workspace = true }
|
|
log = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
wordcraft-doc = { workspace = true }
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
|
# `wgpu` pulls egui-wgpu's defaults: WebGPU plus the WebGL2 fallback.
|
|
eframe = { workspace = true, features = ["default_fonts", "wgpu", "accesskit"] }
|
|
rfd = { workspace = true }
|
|
wasm-bindgen = "0.2"
|
|
wasm-bindgen-futures = "0.4"
|
|
js-sys = "0.3"
|
|
web-sys = { version = "0.3", features = ["Window", "Document", "Element", "HtmlElement", "HtmlCanvasElement", "HtmlAnchorElement", "HtmlIFrameElement", "Blob", "BlobPropertyBag", "Url", "Location", "CssStyleDeclaration", "Event", "EventTarget", "BeforeUnloadEvent"] }
|