diff --git a/packages/html/src/events.rs b/packages/html/src/events.rs index 85a408d0b..0423e52cf 100644 --- a/packages/html/src/events.rs +++ b/packages/html/src/events.rs @@ -129,6 +129,7 @@ pub fn event_bubbles(evt: &str) -> bool { "loadeddata" => false, "loadedmetadata" => false, "loadstart" => false, + "load" => false, "pause" => false, "play" => false, "playing" => false, diff --git a/packages/html/src/events/image.rs b/packages/html/src/events/image.rs index bf5228409..d5858a7f1 100644 --- a/packages/html/src/events/image.rs +++ b/packages/html/src/events/image.rs @@ -4,6 +4,7 @@ pub type ImageEvent = Event; #[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))] #[derive(Debug, Clone, PartialEq, Eq)] pub struct ImageData { + #[cfg_attr(feature = "serialize", serde(default))] pub load_error: bool, } diff --git a/packages/html/src/input_data.rs b/packages/html/src/input_data.rs index 6b994d5f0..28d182fdc 100644 --- a/packages/html/src/input_data.rs +++ b/packages/html/src/input_data.rs @@ -7,6 +7,7 @@ use keyboard_types::Location; /// A mouse button type (such as Primary/Secondary) // note: EnumSetType also derives Copy and Clone for some reason +#[allow(clippy::unused_unit)] #[derive(EnumSetType, Debug)] #[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))] pub enum MouseButton { diff --git a/packages/html/src/transit.rs b/packages/html/src/transit.rs index ef0e7c70d..b0fa0d16f 100644 --- a/packages/html/src/transit.rs +++ b/packages/html/src/transit.rs @@ -91,7 +91,7 @@ fn fun_name( // Touch "touchcancel" | "touchend" | "touchmove" | "touchstart" => Touch(de(data)?), - // Srcoll + // Scroll "scroll" => Scroll(de(data)?), // Wheel @@ -102,7 +102,7 @@ fn fun_name( | "ended" | "interruptbegin" | "interruptend" | "loadeddata" | "loadedmetadata" | "loadstart" | "pause" | "play" | "playing" | "progress" | "ratechange" | "seeked" | "seeking" | "stalled" | "suspend" | "timeupdate" | "volumechange" | "waiting" - | "error" | "load" | "loadend" | "timeout" => Media(de(data)?), + | "loadend" | "timeout" => Media(de(data)?), // Animation "animationstart" | "animationend" | "animationiteration" => Animation(de(data)?), @@ -113,10 +113,11 @@ fn fun_name( // Toggle "toggle" => Toggle(de(data)?), + "load" | "error" => Image(de(data)?), + // Mounted "mounted" => Mounted, - // ImageData => "load" | "error"; // OtherData => "abort" | "afterprint" | "beforeprint" | "beforeunload" | "hashchange" | "languagechange" | "message" | "offline" | "online" | "pagehide" | "pageshow" | "popstate" | "rejectionhandled" | "storage" | "unhandledrejection" | "unload" | "userproximity" | "vrdisplayactivate" | "vrdisplayblur" | "vrdisplayconnect" | "vrdisplaydeactivate" | "vrdisplaydisconnect" | "vrdisplayfocus" | "vrdisplaypointerrestricted" | "vrdisplaypointerunrestricted" | "vrdisplaypresentchange"; other => { return Err(serde_value::DeserializerError::UnknownVariant( @@ -137,6 +138,7 @@ impl HtmlEvent { #[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] #[serde(untagged)] +#[non_exhaustive] pub enum EventData { Mouse(MouseData), Clipboard(ClipboardData), @@ -154,6 +156,7 @@ pub enum EventData { Animation(AnimationData), Transition(TransitionData), Toggle(ToggleData), + Image(ImageData), Mounted, } @@ -176,6 +179,7 @@ impl EventData { EventData::Animation(data) => Rc::new(data) as Rc, EventData::Transition(data) => Rc::new(data) as Rc, EventData::Toggle(data) => Rc::new(data) as Rc, + EventData::Image(data) => Rc::new(data) as Rc, EventData::Mounted => Rc::new(MountedData::new(())) as Rc, } } diff --git a/packages/interpreter/src/interpreter.js b/packages/interpreter/src/interpreter.js index a6995cdf6..9b450e30a 100644 --- a/packages/interpreter/src/interpreter.js +++ b/packages/interpreter/src/interpreter.js @@ -892,10 +892,9 @@ function event_bubbles(event) { case "error": return false; case "loadeddata": - return false; case "loadedmetadata": - return false; case "loadstart": + case "load": return false; case "pause": return false; diff --git a/packages/web/src/dom.rs b/packages/web/src/dom.rs index b9fb6b942..ed7122327 100644 --- a/packages/web/src/dom.rs +++ b/packages/web/src/dom.rs @@ -17,7 +17,7 @@ use js_sys::Array; use rustc_hash::FxHashMap; use std::{any::Any, rc::Rc, sync::Arc}; use wasm_bindgen::{closure::Closure, prelude::wasm_bindgen, JsCast, JsValue}; -use web_sys::{console, Document, Element, Event}; +use web_sys::{Document, Element, Event}; use crate::{file_engine::WebFileEngine, Config}; @@ -257,7 +257,6 @@ impl WebsysDom { // We need tests that simulate clicks/etc and make sure every event type works. pub fn virtual_event_from_websys_event(event: web_sys::Event, target: Element) -> Rc { use dioxus_html::events::*; - console::log_1(&event.clone().into()); match event.type_().as_str() { "copy" | "cut" | "paste" => Rc::new(ClipboardData {}), @@ -293,9 +292,11 @@ pub fn virtual_event_from_websys_event(event: web_sys::Event, target: Element) - } "transitionend" => Rc::new(TransitionData::from(event)), "abort" | "canplay" | "canplaythrough" | "durationchange" | "emptied" | "encrypted" - | "ended" | "error" | "loadeddata" | "loadedmetadata" | "loadstart" | "pause" | "play" + | "ended" | "loadeddata" | "loadedmetadata" | "loadstart" | "pause" | "play" | "playing" | "progress" | "ratechange" | "seeked" | "seeking" | "stalled" | "suspend" | "timeupdate" | "volumechange" | "waiting" => Rc::new(MediaData {}), + "error" => Rc::new(ImageData { load_error: true }), + "load" => Rc::new(ImageData { load_error: false }), "toggle" => Rc::new(ToggleData {}), _ => Rc::new(()),