1#![allow(dead_code)]
2
3use wasm_bindgen::JsCast;
4use wasm_bindgen::closure::Closure;
5
6pub fn window() -> web_sys::Window {
10 web_sys::window().expect("Expecting a window.")
11}
12
13pub fn document() -> web_sys::Document {
17 window().document().expect("Expecting a document.")
18}
19
20pub fn body() -> web_sys::HtmlElement {
24 document().body().expect("Expecting a body.")
25}
26
27pub fn create_element(name: &str) -> web_sys::Element {
31 document()
32 .create_element(name)
33 .expect("Failed to create element.")
34}
35
36pub fn create_text(value: &str) -> web_sys::Text {
40 document().create_text_node(value)
41}
42
43pub fn create_comment(value: &str) -> web_sys::Comment {
47 document().create_comment(value)
48}
49
50pub fn add_event_listener<F>(target: &web_sys::Element, name: &str, cb: F)
54where
55 F: FnMut(web_sys::Event) + 'static,
56{
57 let cb = Closure::wrap(Box::new(cb) as Box<dyn FnMut(web_sys::Event) + 'static>);
58
59 target
60 .add_event_listener_with_callback(name, cb.as_ref().unchecked_ref())
61 .expect("Failed to add event listener.");
62
63 cb.forget();
64}
65
66pub fn append_child(target: &web_sys::Element, child: &web_sys::Node) {
70 target.append_child(child).expect("Failed to append child.");
71}
72
73pub fn replace_child(target: &web_sys::Element, child: &web_sys::Node) {
77 target.replace_with_with_node_1(child).expect("Failed to replace child.")
78}
79
80pub fn set_attribute(target: &web_sys::Element, key: &str, value: &str) {
82 target
83 .set_attribute(key, value)
84 .expect("Failed to set attribute");
85}