From 77544bdfad2af41514ec1435f706fee87ea2969e Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Mon, 7 Feb 2022 15:38:37 +0100 Subject: Added viz.js code --- viz.js/dispatch.ml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100755 viz.js/dispatch.ml (limited to 'viz.js/dispatch.ml') 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 -- cgit v1.2.3