stdweb/webapi/events/
progress.rs1use webcore::value::Reference;
2use webcore::try_from::TryInto;
3use webapi::event::{IEvent, Event};
4
5pub trait IProgressEvent: IEvent {
11 #[inline]
16 fn length_computable( &self ) -> bool {
17 js!(
18 return @{self.as_ref()}.lengthComputable;
19 ).try_into().unwrap()
20 }
21
22 #[inline]
27 fn loaded( &self ) -> u64 {
28 js!(
29 return @{self.as_ref()}.loaded;
30 ).try_into().unwrap()
31 }
32
33 #[inline]
38 fn total( &self ) -> u64 {
39 js!(
40 return @{self.as_ref()}.total;
41 ).try_into().unwrap()
42 }
43}
44
45#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
51#[reference(instance_of = "ProgressEvent")]
52#[reference(subclass_of(Event))]
53pub struct ProgressRelatedEvent( Reference );
54
55impl IEvent for ProgressRelatedEvent {}
56impl IProgressEvent for ProgressRelatedEvent {}
57
58#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
63#[reference(instance_of = "ProgressEvent")]
64#[reference(event = "progress")]
65#[reference(subclass_of(Event, ProgressRelatedEvent))]
66pub struct ProgressEvent( Reference );
67
68impl IEvent for ProgressEvent {}
69impl IProgressEvent for ProgressEvent {}
70
71#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
76#[reference(instance_of = "ProgressEvent")]
77#[reference(event = "load")]
78#[reference(subclass_of(Event, ProgressRelatedEvent))]
79pub struct ProgressLoadEvent( Reference );
80
81impl IEvent for ProgressLoadEvent {}
82impl IProgressEvent for ProgressLoadEvent {}
83
84#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
89#[reference(instance_of = "ProgressEvent")]
90#[reference(event = "loadstart")]
91#[reference(subclass_of(Event, ProgressRelatedEvent))]
92pub struct LoadStartEvent( Reference );
93
94impl IEvent for LoadStartEvent {}
95impl IProgressEvent for LoadStartEvent {}
96
97#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
104#[reference(instance_of = "ProgressEvent")]
105#[reference(event = "loadend")]
106#[reference(subclass_of(Event, ProgressRelatedEvent))]
107pub struct LoadEndEvent( Reference );
108
109impl IEvent for LoadEndEvent {}
110impl IProgressEvent for LoadEndEvent {}
111
112#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
117#[reference(instance_of = "ProgressEvent")]
118#[reference(event = "abort")]
119#[reference(subclass_of(Event, ProgressRelatedEvent))]
120pub struct ProgressAbortEvent( Reference );
121
122impl IEvent for ProgressAbortEvent {}
123impl IProgressEvent for ProgressAbortEvent {}
124
125#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
130#[reference(instance_of = "ProgressEvent")]
131#[reference(event = "error")]
132#[reference(subclass_of(Event, ProgressRelatedEvent))]
133pub struct ProgressErrorEvent( Reference );
134
135impl IEvent for ProgressErrorEvent {}
136impl IProgressEvent for ProgressErrorEvent {}
137
138#[cfg(all(test, feature = "web_test"))]
139mod tests {
140 use super::*;
141 use webapi::event::ConcreteEvent;
142
143 #[test]
144 fn test_progress_event() {
145 let event: ProgressEvent = js!(
146 return new ProgressEvent(
147 @{ProgressEvent::EVENT_TYPE},
148 {
149 lengthComputable: true,
150 loaded: 10,
151 total: 100,
152 }
153 );
154 ).try_into().unwrap();
155 assert_eq!( event.event_type(), ProgressEvent::EVENT_TYPE );
156 assert!( event.length_computable() );
157 assert_eq!( event.loaded(), 10 );
158 assert_eq!( event.total(), 100 );
159 }
160
161 #[test]
162 fn test_load_start_event() {
163 let event: LoadStartEvent = js!(
164 return new ProgressEvent( @{LoadStartEvent::EVENT_TYPE} );
165 ).try_into().unwrap();
166 assert_eq!( event.event_type(), LoadStartEvent::EVENT_TYPE );
167 }
168
169 #[test]
170 fn test_load_end_event() {
171 let event: LoadEndEvent = js!(
172 return new ProgressEvent( @{LoadEndEvent::EVENT_TYPE} );
173 ).try_into().unwrap();
174 assert_eq!( event.event_type(), LoadEndEvent::EVENT_TYPE );
175 }
176}