Skip to content

Commit ecccf11

Browse files
fix(dom): use reference for create event init argument (#37)
1 parent 39ed5ce commit ecccf11

File tree

3 files changed

+16
-14
lines changed

3 files changed

+16
-14
lines changed

book/src/core/user-actions/firing-events.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ fire_event(
3636
## `FireEvent::[<event_name>]`
3737

3838
```rust,ignore
39-
fn [<event_name>](node: &EventTarget, event_properties: [<EventInit>]) -> Result<bool, CreateOrFireEventError>;
39+
fn [<event_name>](node: &EventTarget, event_properties: &[<EventInit>]) -> Result<bool, CreateOrFireEventError>;
4040
```
4141

4242
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");
5757
init.set_char_code(13);
5858
FireEvent::key_down(&dom_node, &init).expect("Event should be fired.");
5959
60-
6160
let init = KeyboardEventInit::new();
6261
init.set_key("A");
6362
init.set_code("KeyA");
@@ -69,7 +68,7 @@ You can find out which key code to use at https://www.toptal.com/developers/keyc
6968
## `CreateEvent::[<event_name>]`
7069

7170
```rust,ignore
72-
fn [<event_name>](node: &EventTarget, event_properties: [<EventInit>]) -> Result<[<Event>], CreateOrFireEventError>;
71+
fn [<event_name>](node: &EventTarget, event_properties: &[<EventInit>]) -> Result<[<Event>], CreateOrFireEventError>;
7372
```
7473

7574
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;
9998
fn create_event<E: EventType>(
10099
event_name: &str,
101100
node: &EventTarget,
102-
init: Option<E::Init>,
101+
init: Option<&E::Init>,
103102
options: CreateEventOptions<E>,
104103
) -> Result<E, CreateEventError>;
105104

packages/dom/src/events.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,19 @@ impl<'a, E: EventType> Default for CreateEventOptions<'a, E> {
4646
pub fn create_event<E: EventType>(
4747
event_name: &str,
4848
_node: &EventTarget,
49-
init: Option<E::Init>,
49+
init: Option<&E::Init>,
5050
options: CreateEventOptions<E>,
5151
) -> Result<E, CreateEventError> {
52-
let event_init = init.unwrap_or_default();
52+
let event_init = match init {
53+
Some(init) => init,
54+
None => &E::Init::default(),
55+
};
5356

5457
if let Some(default_init) = options.default_init {
55-
default_init(&event_init);
58+
default_init(event_init);
5659
}
5760

58-
E::new(event_name, &event_init).map_err(CreateEventError::JsError)
61+
E::new(event_name, event_init).map_err(CreateEventError::JsError)
5962
}
6063

6164
pub struct CreateEvent;
@@ -81,7 +84,7 @@ macro_rules! generate_events {
8184
create_event($event_name, node, None, CreateEventOptions::default().default_init(&[<$key default_init>]))
8285
}
8386

84-
pub fn [<$key _with_init>](node: &EventTarget, init: [<$event_type Init>]) -> Result<$event_type, CreateEventError> {
87+
pub fn [<$key _with_init>](node: &EventTarget, init: &[<$event_type Init>]) -> Result<$event_type, CreateEventError> {
8588
create_event($event_name, node, Some(init), CreateEventOptions::default().default_init(&[<$key default_init>]))
8689
}
8790
)*
@@ -93,7 +96,7 @@ macro_rules! generate_events {
9396
Ok(fire_event(node, &CreateEvent::$key(node)?)?)
9497
}
9598

96-
pub fn [<$key _with_init>](node: &EventTarget, init: [<$event_type Init>]) -> Result<bool, CreateOrFireEventError> {
99+
pub fn [<$key _with_init>](node: &EventTarget, init: &[<$event_type Init>]) -> Result<bool, CreateOrFireEventError> {
97100
Ok(fire_event(node, &CreateEvent::[<$key _with_init>](node, init)?)?)
98101
}
99102
)*
@@ -224,7 +227,7 @@ impl CreateEvent {
224227

225228
pub fn double_click_with_init(
226229
node: &EventTarget,
227-
init: MouseEventInit,
230+
init: &MouseEventInit,
228231
) -> Result<MouseEvent, CreateEventError> {
229232
CreateEvent::dbl_click_with_init(node, init)
230233
}
@@ -238,7 +241,7 @@ impl FireEvent {
238241

239242
pub fn double_click_with_init(
240243
node: &EventTarget,
241-
init: MouseEventInit,
244+
init: &MouseEventInit,
242245
) -> Result<bool, CreateOrFireEventError> {
243246
FireEvent::dbl_click_with_init(node, init)
244247
}

packages/dom/tests/events.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ fn fires_history_popstate_event_on_window() {
110110

111111
let init = PopStateEventInit::new();
112112
init.set_state(&state);
113-
FireEvent::pop_state_with_init(&window, init).expect("Event should be fired.");
113+
FireEvent::pop_state_with_init(&window, &init).expect("Event should be fired.");
114114

115115
window
116116
.remove_event_listener_with_callback("popstate", listener.as_ref().unchecked_ref())
@@ -156,7 +156,7 @@ fn fires_events_on_document() {
156156

157157
let init = KeyboardEventInit::new();
158158
init.set_key("Escape");
159-
FireEvent::key_down_with_init(&document, init).expect("Event should be fired.");
159+
FireEvent::key_down_with_init(&document, &init).expect("Event should be fired.");
160160

161161
document
162162
.remove_event_listener_with_callback("keydown", listener.as_ref().unchecked_ref())

0 commit comments

Comments
 (0)