diff --git a/crates/apps/gioser-web/pkg/gioser_web_bg.wasm b/crates/apps/gioser-web/pkg/gioser_web_bg.wasm index 06d2e0a..2015d52 100644 Binary files a/crates/apps/gioser-web/pkg/gioser_web_bg.wasm and b/crates/apps/gioser-web/pkg/gioser_web_bg.wasm differ diff --git a/crates/apps/gioser-web/src/lib.rs b/crates/apps/gioser-web/src/lib.rs index 1f36ec4..b9c639a 100644 --- a/crates/apps/gioser-web/src/lib.rs +++ b/crates/apps/gioser-web/src/lib.rs @@ -341,7 +341,6 @@ impl AppState { wrapper.append_child(&label).ok(); content_clone.append_child(&wrapper).ok(); // Callback: recibe 'camino' del nodo clickeado y navega - // usando el método nativo .click() del elemento let cb: Box = Box::new(move |target| { let el = match target.as_str() { "logos" | "aire" => "logos", @@ -350,16 +349,11 @@ impl AppState { "uku" | "agua" => "uku", _ => "logos", }; + // Click nativo en el anchor — funciona con también if let Some(tip) = document_clone.query_selector( &format!(".tip[data-md][id='tip-{}']", el) ).ok().flatten() { - // HTMLElement.click() es el método nativo que dispara - // un evento de click real (trusted) con todas las - // coordenadas — el listener en install_tip_clicks lo detecta. - let tip_el: Option<&HtmlElement> = tip.dyn_ref(); - if let Some(html_el) = tip_el { - html_el.click(); - } + let _ = tip.dyn_into::().map(|e| e.click()); } }); let mut graph = GraphWidget::new( @@ -466,7 +460,7 @@ pub fn boot() -> Result<(), JsValue> { install_canvas_pointer(&canvas, &renderer)?; install_canvas_leave(&canvas, &renderer)?; install_tip_clicks(&document, &app)?; - install_deck_delegation(&document, &app)?; + install_controls_delegation(&document, &app)?; install_taskbar(&document, &app)?; install_keyboard(&document, &app)?; install_popstate_listener(&window, &app)?; @@ -622,10 +616,7 @@ fn install_tip_clicks(document: &Document, app: &Rc) -> Result<(), JsV /// Un listener en el deck delega clicks de minimize y close en cada página. /// Las páginas se crean dinámicamente, así que no podemos adjuntar listeners /// por botón en boot. -fn install_deck_delegation(document: &Document, app: &Rc) -> Result<(), JsValue> { - let Some(deck_el) = document.get_element_by_id("deck") else { - return Ok(()); - }; +fn install_controls_delegation(document: &Document, app: &Rc) -> Result<(), JsValue> { let app2 = app.clone(); let cb = Closure::::new(move |e: MouseEvent| { let Some(target) = e.target() else { return }; @@ -667,7 +658,7 @@ fn install_deck_delegation(document: &Document, app: &Rc) -> Result<() } } }); - deck_el.add_event_listener_with_callback("click", cb.as_ref().unchecked_ref())?; + document.add_event_listener_with_callback("click", cb.as_ref().unchecked_ref())?; cb.forget(); Ok(()) }