testing_library_dom/
get_node_text.rs1use wasm_bindgen::JsCast;
2use web_sys::{Element, HtmlInputElement, Node};
3
4use crate::util::node_list_to_vec;
5
6pub fn get_node_text(node: &Node) -> String {
7 if node
8 .dyn_ref::<Element>()
9 .map(|element| {
10 element
11 .matches("input[type=submit], input[type=button], input[type=reset]")
12 .is_ok_and(|value| value)
13 })
14 .unwrap_or(false)
15 {
16 node.unchecked_ref::<HtmlInputElement>().value()
17 } else {
18 node_list_to_vec::<Node>(node.child_nodes())
19 .into_iter()
20 .filter_map(|child| {
21 (child.node_type() == Node::TEXT_NODE)
22 .then(|| child.text_content())
23 .flatten()
24 })
25 .collect::<Vec<_>>()
26 .join("")
27 }
28}