use web_sys::wasm_bindgen::JsCast;
use super::*;
pub(crate) fn euv_event_collect_id_chain(event: &JsValue, max_depth: usize) -> Float64Array {
let event_target: Option<web_sys::EventTarget> =
js_sys::Reflect::get(event, &JsValue::from_str("target"))
.ok()
.and_then(|v: JsValue| v.dyn_into::<web_sys::EventTarget>().ok());
let Some(target) = event_target else {
return Float64Array::new_with_length(0);
};
let mut ids: Vec<f64> = Vec::new();
let mut node: Option<web_sys::Node> = Some(target.unchecked_into::<web_sys::Node>());
let mut depth: usize = 0;
while let Some(n) = node {
if max_depth != 0 && depth >= max_depth {
break;
}
let element: Option<&web_sys::Element> = n.dyn_ref::<web_sys::Element>();
if let Some(el) = element
&& let Some(id_str) = el.get_attribute("data-euv-id")
&& let Ok(parsed) = id_str.parse::<f64>()
{
ids.push(parsed);
}
depth += 1;
node = n.parent_node();
}
let arr: Float64Array = Float64Array::new_with_length(ids.len() as u32);
arr.copy_from(&ids);
arr
}