瀏覽代碼

Merge pull request #1010 from Demonthos/fix-onload-event

Fix the onload event
Jon Kelley 2 年之前
父節點
當前提交
abccc7463f

+ 1 - 0
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,

+ 1 - 0
packages/html/src/events/image.rs

@@ -4,6 +4,7 @@ pub type ImageEvent = Event<ImageData>;
 #[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,
 }
 

+ 1 - 0
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 {

+ 7 - 3
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<dyn Any>,
             EventData::Transition(data) => Rc::new(data) as Rc<dyn Any>,
             EventData::Toggle(data) => Rc::new(data) as Rc<dyn Any>,
+            EventData::Image(data) => Rc::new(data) as Rc<dyn Any>,
             EventData::Mounted => Rc::new(MountedData::new(())) as Rc<dyn Any>,
         }
     }

+ 1 - 2
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;

+ 4 - 3
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<dyn Any> {
     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(()),