blockworx_canvas2d/
handoff.rs1use wasm_bindgen::{JsCast as _, JsValue};
7
8pub fn download(file_name: &str, mime: &str, bytes: &[u8]) -> Result<(), JsValue> {
16 let parts = js_sys::Array::new();
17 parts.push(&js_sys::Uint8Array::from(bytes));
18 let options = web_sys::BlobPropertyBag::new();
19 options.set_type(mime);
20 let blob = web_sys::Blob::new_with_u8_array_sequence_and_options(&parts, &options)?;
21 let url = web_sys::Url::create_object_url_with_blob(&blob)?;
22
23 let document = web_sys::window()
24 .and_then(|window| window.document())
25 .ok_or_else(|| JsValue::from_str("no document"))?;
26 let anchor = document
27 .create_element("a")?
28 .dyn_into::<web_sys::HtmlAnchorElement>()?;
29 anchor.set_href(&url);
30 anchor.set_download(file_name);
31 anchor.click();
32
33 web_sys::Url::revoke_object_url(&url)?;
34 Ok(())
35}
36
37pub fn clipboard_write(text: &str) -> Result<(), JsValue> {
44 let clipboard = web_sys::window()
45 .ok_or_else(|| JsValue::from_str("no window"))?
46 .navigator()
47 .clipboard();
48 let _ = clipboard.write_text(text);
49 Ok(())
50}