diff options
author | Sébastien Dailly <sebastien@dailly.me> | 2022-02-07 15:38:37 +0100 |
---|---|---|
committer | Sébastien Dailly <sebastien@dailly.me> | 2022-02-07 16:01:12 +0100 |
commit | 77544bdfad2af41514ec1435f706fee87ea2969e (patch) | |
tree | 4de23870e08711da25ff92e9670370fc0a74e459 /viz.js/dispatch.ml | |
parent | ad526111f0dd619ae9e0e98ef2253146b58a068f (diff) |
Added viz.js code
Diffstat (limited to 'viz.js/dispatch.ml')
-rwxr-xr-x | viz.js/dispatch.ml | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/viz.js/dispatch.ml b/viz.js/dispatch.ml new file mode 100755 index 0000000..42f7dc8 --- /dev/null +++ b/viz.js/dispatch.ml @@ -0,0 +1,30 @@ +open Js_of_ocaml + +type event_container = + E : 'a Dom.Event.typ * ('a -> unit) -> event_container + +type event_key = K : 'a Dom.Event.typ -> event_key + +type t = event_container + +let (catalog:event_container list ref) = ref [] + +let register: type a. a Dom.Event.typ -> (a -> unit) -> t = + begin fun event callback -> + let handler = E (event, callback) in + catalog := handler::!catalog; + handler + end + +let remove: type a. a Dom.Event.typ -> t -> unit = + begin fun _event callback -> + catalog := List.filter (fun reg -> reg != callback) !catalog; + end + +let call: type a. a Dom.Event.typ -> a -> unit = + begin fun event value -> + List.iter (fun (E (registered_event, callback)) -> + if K event = K registered_event then + callback (Obj.magic value) + ) !catalog + end |