From ddab4f9c9b655de92b72f4c464d402fdb4ebb348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABlle=20Huisman?= Date: Sat, 16 Aug 2025 11:39:54 +0200 Subject: [PATCH] fix(dom): use reference for create event init argument --- book/src/core/user-actions/firing-events.md | 7 +++---- packages/dom/src/events.rs | 19 +++++++++++-------- packages/dom/tests/events.rs | 4 ++-- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/book/src/core/user-actions/firing-events.md b/book/src/core/user-actions/firing-events.md index 6bf87b3..179f117 100644 --- a/book/src/core/user-actions/firing-events.md +++ b/book/src/core/user-actions/firing-events.md @@ -36,7 +36,7 @@ fire_event( ## `FireEvent::[]` ```rust,ignore -fn [](node: &EventTarget, event_properties: []) -> Result; +fn [](node: &EventTarget, event_properties: &[]) -> Result; ``` Convenience methods for firing DOM events. Check out `src/events.rs` for a full list as well as default event proprties. @@ -57,7 +57,6 @@ init.set_code("Enter"); init.set_char_code(13); FireEvent::key_down(&dom_node, &init).expect("Event should be fired."); - let init = KeyboardEventInit::new(); init.set_key("A"); init.set_code("KeyA"); @@ -69,7 +68,7 @@ You can find out which key code to use at https://www.toptal.com/developers/keyc ## `CreateEvent::[]` ```rust,ignore -fn [](node: &EventTarget, event_properties: []) -> Result<[], CreateOrFireEventError>; +fn [](node: &EventTarget, event_properties: &[]) -> Result<[], CreateOrFireEventError>; ``` Convenience methods for creating DOM events that can then be fired by `fire_event`, allowing you to have a reference to the event created: this might be useful if you need to access event properties that cannot be initiated programmatically (such as [`time_stamp`](https://docs.rs/web-sys/latest/web_sys/struct.Event.html#method.time_stamp)). @@ -99,7 +98,7 @@ use web_sys::EventTarget; fn create_event( event_name: &str, node: &EventTarget, - init: Option, + init: Option<&E::Init>, options: CreateEventOptions, ) -> Result; diff --git a/packages/dom/src/events.rs b/packages/dom/src/events.rs index 42ca25e..3252a76 100644 --- a/packages/dom/src/events.rs +++ b/packages/dom/src/events.rs @@ -46,16 +46,19 @@ impl<'a, E: EventType> Default for CreateEventOptions<'a, E> { pub fn create_event( event_name: &str, _node: &EventTarget, - init: Option, + init: Option<&E::Init>, options: CreateEventOptions, ) -> Result { - let event_init = init.unwrap_or_default(); + let event_init = match init { + Some(init) => init, + None => &E::Init::default(), + }; if let Some(default_init) = options.default_init { - default_init(&event_init); + default_init(event_init); } - E::new(event_name, &event_init).map_err(CreateEventError::JsError) + E::new(event_name, event_init).map_err(CreateEventError::JsError) } pub struct CreateEvent; @@ -81,7 +84,7 @@ macro_rules! generate_events { create_event($event_name, node, None, CreateEventOptions::default().default_init(&[<$key default_init>])) } - pub fn [<$key _with_init>](node: &EventTarget, init: [<$event_type Init>]) -> Result<$event_type, CreateEventError> { + pub fn [<$key _with_init>](node: &EventTarget, init: &[<$event_type Init>]) -> Result<$event_type, CreateEventError> { create_event($event_name, node, Some(init), CreateEventOptions::default().default_init(&[<$key default_init>])) } )* @@ -93,7 +96,7 @@ macro_rules! generate_events { Ok(fire_event(node, &CreateEvent::$key(node)?)?) } - pub fn [<$key _with_init>](node: &EventTarget, init: [<$event_type Init>]) -> Result { + pub fn [<$key _with_init>](node: &EventTarget, init: &[<$event_type Init>]) -> Result { Ok(fire_event(node, &CreateEvent::[<$key _with_init>](node, init)?)?) } )* @@ -224,7 +227,7 @@ impl CreateEvent { pub fn double_click_with_init( node: &EventTarget, - init: MouseEventInit, + init: &MouseEventInit, ) -> Result { CreateEvent::dbl_click_with_init(node, init) } @@ -238,7 +241,7 @@ impl FireEvent { pub fn double_click_with_init( node: &EventTarget, - init: MouseEventInit, + init: &MouseEventInit, ) -> Result { FireEvent::dbl_click_with_init(node, init) } diff --git a/packages/dom/tests/events.rs b/packages/dom/tests/events.rs index d29b16c..3bbc49d 100644 --- a/packages/dom/tests/events.rs +++ b/packages/dom/tests/events.rs @@ -110,7 +110,7 @@ fn fires_history_popstate_event_on_window() { let init = PopStateEventInit::new(); init.set_state(&state); - FireEvent::pop_state_with_init(&window, init).expect("Event should be fired."); + FireEvent::pop_state_with_init(&window, &init).expect("Event should be fired."); window .remove_event_listener_with_callback("popstate", listener.as_ref().unchecked_ref()) @@ -156,7 +156,7 @@ fn fires_events_on_document() { let init = KeyboardEventInit::new(); init.set_key("Escape"); - FireEvent::key_down_with_init(&document, init).expect("Event should be fired."); + FireEvent::key_down_with_init(&document, &init).expect("Event should be fired."); document .remove_event_listener_with_callback("keydown", listener.as_ref().unchecked_ref())