Skip to content

Commit

Permalink
Added media events support.
Browse files Browse the repository at this point in the history
  • Loading branch information
sagotch committed Apr 17, 2018
1 parent b5392f2 commit a72bd44
Show file tree
Hide file tree
Showing 4 changed files with 304 additions and 1 deletion.
43 changes: 43 additions & 0 deletions lib/dom_html.ml
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,10 @@ and animationEvent = object
method pseudoElement : js_string t readonly_prop
end

and mediaEvent = object
inherit event
end

and nodeSelector = object
method querySelector : js_string t -> element t opt meth
method querySelectorAll : js_string t -> element Dom.nodeList t meth
Expand Down Expand Up @@ -453,6 +457,25 @@ module Event = struct
let animationiteration = Dom.Event.make "animationiteration"
let animationcancel = Dom.Event.make "animationcancel"

let canplay = Dom.Event.make "canplay"
let canplaythrough = Dom.Event.make "canplaythrough"
let durationchange = Dom.Event.make "durationchange"
let emptied = Dom.Event.make "emptied"
let ended = Dom.Event.make "ended"
let loadeddata = Dom.Event.make "loadeddata"
let loadedmetadata = Dom.Event.make "loadedmetadata"
let loadstart = Dom.Event.make "loadstart"
let pause = Dom.Event.make "pause"
let play = Dom.Event.make "play"
let playing = Dom.Event.make "playing"
let ratechange = Dom.Event.make "ratechange"
let seeked = Dom.Event.make "seeked"
let seeking = Dom.Event.make "seeking"
let stalled = Dom.Event.make "stalled"
let suspend = Dom.Event.make "suspend"
let volumechange = Dom.Event.make "volumechange"
let waiting = Dom.Event.make "waiting"

let make = Dom.Event.make
end

Expand Down Expand Up @@ -911,6 +934,26 @@ class type mediaElement = object
method seeking : bool t readonly_prop
method src : js_string t prop
method volume : float prop

method oncanplay : ('self t, mediaEvent t) event_listener writeonly_prop
method oncanplaythrough : ('self t, mediaEvent t) event_listener writeonly_prop
method ondurationchange : ('self t, mediaEvent t) event_listener writeonly_prop
method onemptied : ('self t, mediaEvent t) event_listener writeonly_prop
method onended : ('self t, mediaEvent t) event_listener writeonly_prop
method onloadeddata : ('self t, mediaEvent t) event_listener writeonly_prop
method onloadedmetadata : ('self t, mediaEvent t) event_listener writeonly_prop
method onloadstart : ('self t, mediaEvent t) event_listener writeonly_prop
method onpause : ('self t, mediaEvent t) event_listener writeonly_prop
method onplay : ('self t, mediaEvent t) event_listener writeonly_prop
method onplaying : ('self t, mediaEvent t) event_listener writeonly_prop
method onratechange : ('self t, mediaEvent t) event_listener writeonly_prop
method onseeked : ('self t, mediaEvent t) event_listener writeonly_prop
method onseeking : ('self t, mediaEvent t) event_listener writeonly_prop
method onstalled : ('self t, mediaEvent t) event_listener writeonly_prop
method onsuspend : ('self t, mediaEvent t) event_listener writeonly_prop
method onvolumechange : ('self t, mediaEvent t) event_listener writeonly_prop
method onwaiting : ('self t, mediaEvent t) event_listener writeonly_prop

end

class type audioElement = object
Expand Down
43 changes: 43 additions & 0 deletions lib/dom_html.mli
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,10 @@ and animationEvent = object
method pseudoElement : js_string t readonly_prop
end

and mediaEvent = object
inherit event
end

(** {2 HTML elements} *)

and nodeSelector = object
Expand Down Expand Up @@ -854,6 +858,26 @@ class type mediaElement = object
method seeking : bool t readonly_prop
method src : js_string t prop
method volume : float prop

method oncanplay : ('self t, mediaEvent t) event_listener writeonly_prop
method oncanplaythrough : ('self t, mediaEvent t) event_listener writeonly_prop
method ondurationchange : ('self t, mediaEvent t) event_listener writeonly_prop
method onemptied : ('self t, mediaEvent t) event_listener writeonly_prop
method onended : ('self t, mediaEvent t) event_listener writeonly_prop
method onloadeddata : ('self t, mediaEvent t) event_listener writeonly_prop
method onloadedmetadata : ('self t, mediaEvent t) event_listener writeonly_prop
method onloadstart : ('self t, mediaEvent t) event_listener writeonly_prop
method onpause : ('self t, mediaEvent t) event_listener writeonly_prop
method onplay : ('self t, mediaEvent t) event_listener writeonly_prop
method onplaying : ('self t, mediaEvent t) event_listener writeonly_prop
method onratechange : ('self t, mediaEvent t) event_listener writeonly_prop
method onseeked : ('self t, mediaEvent t) event_listener writeonly_prop
method onseeking : ('self t, mediaEvent t) event_listener writeonly_prop
method onstalled : ('self t, mediaEvent t) event_listener writeonly_prop
method onsuspend : ('self t, mediaEvent t) event_listener writeonly_prop
method onvolumechange : ('self t, mediaEvent t) event_listener writeonly_prop
method onwaiting : ('self t, mediaEvent t) event_listener writeonly_prop

end

class type audioElement = object
Expand Down Expand Up @@ -1394,6 +1418,25 @@ module Event : sig
val animationiteration : animationEvent t typ
val animationcancel : animationEvent t typ

val canplay : mediaEvent t typ
val canplaythrough : mediaEvent t typ
val durationchange : mediaEvent t typ
val emptied : mediaEvent t typ
val ended : mediaEvent t typ
val loadeddata : mediaEvent t typ
val loadedmetadata : mediaEvent t typ
val loadstart : mediaEvent t typ
val pause : mediaEvent t typ
val play : mediaEvent t typ
val playing : mediaEvent t typ
val ratechange : mediaEvent t typ
val seeked : mediaEvent t typ
val seeking : mediaEvent t typ
val stalled : mediaEvent t typ
val suspend : mediaEvent t typ
val volumechange : mediaEvent t typ
val waiting : mediaEvent t typ

val make : string -> 'a typ
end

Expand Down
74 changes: 73 additions & 1 deletion lib/lwt/lwt_js_events.ml
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,42 @@ let error ?use_capture target =
let load ?use_capture target =
make_event Dom_html.Event.load ?use_capture target


let canplay ?use_capture target =
make_event Dom_html.Event.canplay ?use_capture target
let canplaythrough ?use_capture target =
make_event Dom_html.Event.canplaythrough ?use_capture target
let durationchange ?use_capture target =
make_event Dom_html.Event.durationchange ?use_capture target
let emptied ?use_capture target =
make_event Dom_html.Event.emptied ?use_capture target
let ended ?use_capture target =
make_event Dom_html.Event.ended ?use_capture target
let loadeddata ?use_capture target =
make_event Dom_html.Event.loadeddata ?use_capture target
let loadedmetadata ?use_capture target =
make_event Dom_html.Event.loadedmetadata ?use_capture target
let loadstart ?use_capture target =
make_event Dom_html.Event.loadstart ?use_capture target
let pause ?use_capture target =
make_event Dom_html.Event.pause ?use_capture target
let play ?use_capture target =
make_event Dom_html.Event.play ?use_capture target
let playing ?use_capture target =
make_event Dom_html.Event.playing ?use_capture target
let ratechange ?use_capture target =
make_event Dom_html.Event.ratechange ?use_capture target
let seeked ?use_capture target =
make_event Dom_html.Event.seeked ?use_capture target
let seeking ?use_capture target =
make_event Dom_html.Event.seeking ?use_capture target
let stalled ?use_capture target =
make_event Dom_html.Event.stalled ?use_capture target
let suspend ?use_capture target =
make_event Dom_html.Event.suspend ?use_capture target
let volumechange ?use_capture target =
make_event Dom_html.Event.volumechange ?use_capture target
let waiting ?use_capture target =
make_event Dom_html.Event.waiting ?use_capture target

(* special case for mousewheel, because it depends on the browser *)
let mousewheel ?(use_capture=false) target =
Expand Down Expand Up @@ -324,6 +359,43 @@ let errors ?cancel_handler ?use_capture t =
let loads ?cancel_handler ?use_capture t =
seq_loop load ?cancel_handler ?use_capture t

let canplays ?cancel_handler ?use_capture t =
seq_loop canplay ?cancel_handler ?use_capture t
let canplaythroughs ?cancel_handler ?use_capture t =
seq_loop canplaythrough ?cancel_handler ?use_capture t
let durationchanges ?cancel_handler ?use_capture t =
seq_loop durationchange ?cancel_handler ?use_capture t
let emptieds ?cancel_handler ?use_capture t =
seq_loop emptied ?cancel_handler ?use_capture t
let endeds ?cancel_handler ?use_capture t =
seq_loop ended ?cancel_handler ?use_capture t
let loadeddatas ?cancel_handler ?use_capture t =
seq_loop loadeddata ?cancel_handler ?use_capture t
let loadedmetadatas ?cancel_handler ?use_capture t =
seq_loop loadedmetadata ?cancel_handler ?use_capture t
let loadstarts ?cancel_handler ?use_capture t =
seq_loop loadstart ?cancel_handler ?use_capture t
let pauses ?cancel_handler ?use_capture t =
seq_loop pause ?cancel_handler ?use_capture t
let plays ?cancel_handler ?use_capture t =
seq_loop play ?cancel_handler ?use_capture t
let playings ?cancel_handler ?use_capture t =
seq_loop playing ?cancel_handler ?use_capture t
let ratechanges ?cancel_handler ?use_capture t =
seq_loop ratechange ?cancel_handler ?use_capture t
let seekeds ?cancel_handler ?use_capture t =
seq_loop seeked ?cancel_handler ?use_capture t
let seekings ?cancel_handler ?use_capture t =
seq_loop seeking ?cancel_handler ?use_capture t
let stalleds ?cancel_handler ?use_capture t =
seq_loop stalled ?cancel_handler ?use_capture t
let suspends ?cancel_handler ?use_capture t =
seq_loop suspend ?cancel_handler ?use_capture t
let volumechanges ?cancel_handler ?use_capture t =
seq_loop volumechange ?cancel_handler ?use_capture t
let waitings ?cancel_handler ?use_capture t =
seq_loop waiting ?cancel_handler ?use_capture t

let transition_evn = lazy (
let e = Dom_html.createDiv Dom_html.document in
try
Expand Down
145 changes: 145 additions & 0 deletions lib/lwt/lwt_js_events.mli
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,60 @@ val error : ?use_capture:bool ->
val abort : ?use_capture:bool ->
#Dom_html.imageElement Js.t -> Dom_html.event Js.t Lwt.t

val canplay :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val canplaythrough :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val durationchange :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val emptied :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val ended :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val loadeddata :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val loadedmetadata :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val loadstart :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val pause :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val play :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val playing :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val ratechange :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val seeked :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val seeking :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val stalled :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val suspend :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val volumechange :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t
val waiting :
?use_capture:bool ->
#Dom_html.eventTarget Js.t -> Dom_html.event Js.t Lwt.t

val clicks :
?cancel_handler:bool ->
Expand Down Expand Up @@ -452,6 +506,97 @@ val aborts :
#Dom_html.imageElement Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t

val canplays :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val canplaythroughs :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val durationchanges :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val emptieds :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val endeds :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val loadeddatas :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val loadedmetadatas :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val loadstarts :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val pauses :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val plays :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val playings :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val ratechanges :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val seekeds :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val seekings :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val stalleds :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val suspends :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val volumechanges :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t
val waitings :
?cancel_handler:bool ->
?use_capture:bool ->
#Dom_html.eventTarget Js.t ->
(Dom_html.event Js.t -> unit Lwt.t -> unit Lwt.t) -> unit Lwt.t

(** Returns when a repaint of the window by the browser starts.
(see JS method [window.requestAnimationFrame]) *)
val request_animation_frame : unit -> unit Lwt.t
Expand Down

0 comments on commit a72bd44

Please sign in to comment.