Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions book/src/core/user-actions/firing-events.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ fire_event(
## `FireEvent::[<event_name>]`

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

Convenience methods for firing DOM events. Check out `src/events.rs` for a full list as well as default event proprties.
Expand All @@ -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");
Expand All @@ -69,7 +68,7 @@ You can find out which key code to use at https://www.toptal.com/developers/keyc
## `CreateEvent::[<event_name>]`

```rust,ignore
fn [<event_name>](node: &EventTarget, event_properties: [<EventInit>]) -> Result<[<Event>], CreateOrFireEventError>;
fn [<event_name>](node: &EventTarget, event_properties: &[<EventInit>]) -> Result<[<Event>], 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)).
Expand Down Expand Up @@ -99,7 +98,7 @@ use web_sys::EventTarget;
fn create_event<E: EventType>(
event_name: &str,
node: &EventTarget,
init: Option<E::Init>,
init: Option<&E::Init>,
options: CreateEventOptions<E>,
) -> Result<E, CreateEventError>;

Expand Down
19 changes: 11 additions & 8 deletions packages/dom/src/events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,19 @@ impl<'a, E: EventType> Default for CreateEventOptions<'a, E> {
pub fn create_event<E: EventType>(
event_name: &str,
_node: &EventTarget,
init: Option<E::Init>,
init: Option<&E::Init>,
options: CreateEventOptions<E>,
) -> Result<E, CreateEventError> {
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;
Expand All @@ -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>]))
}
)*
Expand All @@ -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<bool, CreateOrFireEventError> {
pub fn [<$key _with_init>](node: &EventTarget, init: &[<$event_type Init>]) -> Result<bool, CreateOrFireEventError> {
Ok(fire_event(node, &CreateEvent::[<$key _with_init>](node, init)?)?)
}
)*
Expand Down Expand Up @@ -224,7 +227,7 @@ impl CreateEvent {

pub fn double_click_with_init(
node: &EventTarget,
init: MouseEventInit,
init: &MouseEventInit,
) -> Result<MouseEvent, CreateEventError> {
CreateEvent::dbl_click_with_init(node, init)
}
Expand All @@ -238,7 +241,7 @@ impl FireEvent {

pub fn double_click_with_init(
node: &EventTarget,
init: MouseEventInit,
init: &MouseEventInit,
) -> Result<bool, CreateOrFireEventError> {
FireEvent::dbl_click_with_init(node, init)
}
Expand Down
4 changes: 2 additions & 2 deletions packages/dom/tests/events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down Expand Up @@ -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())
Expand Down