Skip to content

Commit

Permalink
add dispatch_custom_event to enable dispatching CustomEvent's
Browse files Browse the repository at this point in the history
  • Loading branch information
SorenHolstHansen committed Apr 26, 2024
1 parent e78db23 commit f85010e
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 0 deletions.
8 changes: 8 additions & 0 deletions crates/web-sys/src/features/gen_EventTarget.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,14 @@ extern "C" {
#[doc = ""]
#[doc = "*This API requires the following crate features to be activated: `Event`, `EventTarget`*"]
pub fn dispatch_event(this: &EventTarget, event: &Event) -> Result<bool, JsValue>;
#[cfg(feature = "CustomEvent")]
# [wasm_bindgen (catch , method , structural , js_class = "EventTarget" , js_name = dispatchEvent)]
#[doc = "The `dispatchEvent()` method."]
#[doc = ""]
#[doc = "[MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent)"]
#[doc = ""]
#[doc = "*This API requires the following crate features to be activated: `CustomEvent`, `EventTarget`*"]
pub fn dispatch_custom_event(this: &EventTarget, event: &CustomEvent) -> Result<bool, JsValue>;
# [wasm_bindgen (catch , method , structural , js_class = "EventTarget" , js_name = removeEventListener)]
#[doc = "The `removeEventListener()` method."]
#[doc = ""]
Expand Down
11 changes: 11 additions & 0 deletions crates/web-sys/tests/wasm/custom_event.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export function new_custom_event() {
return new Promise(resolve => {
window.addEventListener("test-custom-event", resolve);
window.dispatchEvent(new CustomEvent("test-custom-event", {
detail: "detail",
bubbles: true,
cancelable: true,
composed: true,
}));
});
}
31 changes: 31 additions & 0 deletions crates/web-sys/tests/wasm/custom_event.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
use js_sys::{Object, Promise};
use wasm_bindgen::prelude::*;
use wasm_bindgen_futures::JsFuture;
use wasm_bindgen_test::*;
use web_sys::CustomEvent;

#[wasm_bindgen(module = "/tests/wasm/custom_event.js")]
extern "C" {
fn new_custom_event() -> Promise;
}

#[wasm_bindgen_test]
async fn custom_event() {
let result = JsFuture::from(new_custom_event()).await.unwrap();
let event = CustomEvent::from(result);
// All DOM interfaces should inherit from `Object`.
assert!(event.is_instance_of::<Object>());
let _: &Object = event.as_ref();

// These should match `new Event`.
assert!(event.bubbles());
assert!(event.cancelable());
assert!(event.composed());
assert_eq!(event.detail().as_string().unwrap(), "detail");

// The default behavior not initially prevented, but after
// we call `prevent_default` it better be.
assert!(!event.default_prevented());
event.prevent_default();
assert!(event.default_prevented());
}

0 comments on commit f85010e

Please sign in to comment.