web_tools/optimistic/
element.rs

1/// Support working with [`web_sys::Element`]
2pub trait OptimisticElement {
3    /// Call [`web_sys::Element::contains`], or return `false` if this is not an [`web_sys::Element`].
4    fn contains(&self, target: Option<web_sys::EventTarget>) -> bool;
5}
6
7#[cfg(feature = "yew")]
8impl OptimisticElement for yew::prelude::NodeRef {
9    fn contains(&self, target: Option<web_sys::EventTarget>) -> bool {
10        use web_sys::wasm_bindgen::JsCast;
11
12        let target = target
13            .as_ref()
14            .and_then(|target| target.dyn_ref::<web_sys::Node>());
15        if let Some(element) = self.cast::<web_sys::Element>() {
16            element.contains(target)
17        } else {
18            false
19        }
20    }
21}