wasm_dom/
lib.rs

1pub use js_sys::{self, Reflect};
2pub use wasm_bindgen::{self, JsCast, JsValue, UnwrapThrowExt};
3pub use web_sys::{Document, Location, Window};
4
5pub use crate::error::{Error, Result};
6
7pub mod error;
8pub mod existing;
9
10pub fn window() -> Result<Window> {
11    web_sys::window().ok_or(Error::WindowNotFound)
12}
13
14pub fn document() -> Result<Document> {
15    window()?.document().ok_or(Error::DocumentNotFound)
16}
17
18pub fn location() -> Result<Location> {
19    document()?.location().ok_or(Error::LocationNotFound)
20}
21
22pub fn get_element_by_id<T: JsCast>(id: &str) -> Result<T> {
23    let element = document()?
24        .get_element_by_id(id)
25        .ok_or_else(|| Error::ElementNotFound(id.into()))?;
26    element.dyn_into::<T>().map_err(|_| Error::IsNotAnElement)
27}
28
29pub fn select_element<T: JsCast>(selectors: &str) -> Result<T> {
30    document()?
31        .query_selector(selectors)
32        .map_err(|_| Error::InvalidSelectors(selectors.into()))?
33        .ok_or_else(|| Error::ElementNotFound(selectors.into()))?
34        .dyn_into::<T>()
35        .map_err(|element| Error::ElementNotCast(element))
36}