From 405bc51d673a77e1455d98f2440207dba7812705 Mon Sep 17 00:00:00 2001 From: Julius Lungys <32368314+voidpumpkin@users.noreply.github.com> Date: Sun, 21 Nov 2021 22:51:27 +0200 Subject: [PATCH 1/4] make stop_propogation work --- packages/yew/src/virtual_dom/listeners.rs | 42 ++++++++++++++++++++--- packages/yew/src/virtual_dom/mod.rs | 4 +-- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/packages/yew/src/virtual_dom/listeners.rs b/packages/yew/src/virtual_dom/listeners.rs index 5b3099e9fb2..3eae21dc9ad 100644 --- a/packages/yew/src/virtual_dom/listeners.rs +++ b/packages/yew/src/virtual_dom/listeners.rs @@ -502,7 +502,7 @@ impl Registry { run_handler(&target); - if unsafe { BUBBLE_EVENTS } { + if unsafe { BUBBLE_EVENTS } && !event.cancel_bubble() { let mut el = target; loop { el = match el.parent_element() { @@ -523,7 +523,7 @@ mod tests { use std::marker::PhantomData; use wasm_bindgen_test::{wasm_bindgen_test as test, wasm_bindgen_test_configure}; - use web_sys::{Event, EventInit}; + use web_sys::{Event, EventInit, MouseEvent}; wasm_bindgen_test_configure!(run_in_browser); use crate::{html, html::TargetCast, AppHandle, Component, Context, Html}; @@ -794,6 +794,40 @@ mod tests { assert_count(&el, 4); } + #[test] + fn cancel_bubbling() { + struct CencelBubbling; + + impl Mixin for CencelBubbling { + fn view(ctx: &Context, state: &State) -> Html + where + C: Component, + { + html! { +
+ + {state.action} + +
+ } + } + } + + let (_, el) = init::("a"); + + assert_count(&el, 0); + + el.click(); + assert_count(&el, 1); + + el.click(); + assert_count(&el, 2); + } + fn test_input_listener(make_event: impl Fn() -> E) where E: JsCast + std::fmt::Debug, @@ -858,7 +892,7 @@ mod tests { test_input_listener(|| { web_sys::InputEvent::new_with_event_init_dict( "input", - &web_sys::InputEventInit::new().bubbles(true), + web_sys::InputEventInit::new().bubbles(true), ) .unwrap() }) @@ -869,7 +903,7 @@ mod tests { test_input_listener(|| { web_sys::Event::new_with_event_init_dict( "change", - &web_sys::EventInit::new().bubbles(true), + web_sys::EventInit::new().bubbles(true), ) .unwrap() }) diff --git a/packages/yew/src/virtual_dom/mod.rs b/packages/yew/src/virtual_dom/mod.rs index d763f68af59..e9b0e1b5493 100644 --- a/packages/yew/src/virtual_dom/mod.rs +++ b/packages/yew/src/virtual_dom/mod.rs @@ -721,7 +721,7 @@ mod benchmarks { let static_ = Attributes::Static(&[]); let dynamic = Attributes::Dynamic { keys: &[], - values: vec![], + values: Box::new([]), }; let map = Attributes::IndexMap(Default::default()); @@ -776,7 +776,7 @@ mod benchmarks { fn make_dynamic(values: Vec) -> Attributes { Attributes::Dynamic { keys: sample_keys(), - values: values.into_iter().map(|v| Some(v)).collect(), + values: values.into_iter().map(Some).collect(), } } From 7d03c9df11410666206d251668f4f91c4442af43 Mon Sep 17 00:00:00 2001 From: Julius Lungys <32368314+voidpumpkin@users.noreply.github.com> Date: Sun, 21 Nov 2021 22:56:21 +0200 Subject: [PATCH 2/4] Update packages/yew/src/virtual_dom/listeners.rs Co-authored-by: mc1098 --- packages/yew/src/virtual_dom/listeners.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yew/src/virtual_dom/listeners.rs b/packages/yew/src/virtual_dom/listeners.rs index 3eae21dc9ad..3566021dc76 100644 --- a/packages/yew/src/virtual_dom/listeners.rs +++ b/packages/yew/src/virtual_dom/listeners.rs @@ -796,7 +796,7 @@ mod tests { #[test] fn cancel_bubbling() { - struct CencelBubbling; + struct CancelBubbling; impl Mixin for CencelBubbling { fn view(ctx: &Context, state: &State) -> Html From c347ec76aea39b769b30d4ce17066c1964b0cd4b Mon Sep 17 00:00:00 2001 From: Julius Lungys <32368314+voidpumpkin@users.noreply.github.com> Date: Sun, 21 Nov 2021 22:56:26 +0200 Subject: [PATCH 3/4] Update packages/yew/src/virtual_dom/listeners.rs Co-authored-by: mc1098 --- packages/yew/src/virtual_dom/listeners.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yew/src/virtual_dom/listeners.rs b/packages/yew/src/virtual_dom/listeners.rs index 3566021dc76..439c47bf013 100644 --- a/packages/yew/src/virtual_dom/listeners.rs +++ b/packages/yew/src/virtual_dom/listeners.rs @@ -798,7 +798,7 @@ mod tests { fn cancel_bubbling() { struct CancelBubbling; - impl Mixin for CencelBubbling { + impl Mixin for CancelBubbling { fn view(ctx: &Context, state: &State) -> Html where C: Component, From b57adf6a77771b2d78577b1ac9b8f48e4287517f Mon Sep 17 00:00:00 2001 From: Julius Lungys <32368314+voidpumpkin@users.noreply.github.com> Date: Sun, 21 Nov 2021 22:56:30 +0200 Subject: [PATCH 4/4] Update packages/yew/src/virtual_dom/listeners.rs Co-authored-by: mc1098 --- packages/yew/src/virtual_dom/listeners.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yew/src/virtual_dom/listeners.rs b/packages/yew/src/virtual_dom/listeners.rs index 439c47bf013..0b4e0859012 100644 --- a/packages/yew/src/virtual_dom/listeners.rs +++ b/packages/yew/src/virtual_dom/listeners.rs @@ -817,7 +817,7 @@ mod tests { } } - let (_, el) = init::("a"); + let (_, el) = init::("a"); assert_count(&el, 0);