From 081e6aae57719c15bdbc5e973ca7ddba9506a4bb Mon Sep 17 00:00:00 2001 From: Joris Date: Sat, 8 Aug 2020 12:49:03 +0200 Subject: Show context menu to add, modify and delete markers --- src/Lib/ContextMenu.ml | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/Lib/ContextMenu.ml (limited to 'src/Lib/ContextMenu.ml') diff --git a/src/Lib/ContextMenu.ml b/src/Lib/ContextMenu.ml new file mode 100644 index 0000000..b9ed7d4 --- /dev/null +++ b/src/Lib/ContextMenu.ml @@ -0,0 +1,40 @@ +let px f = + Js.Float.toString f ^ "px" + +type entry = + { label: string + ; action: unit -> unit + } + +let show mouse_event actions = + let menu = + H.div + [| HA.id "g-ContextMenu" + ; HA.style ("left: " ^ (px (Event.page_x mouse_event)) ^ "; top: " ^ (px (Event.page_y mouse_event))) + |] + (Js.Array.map + (fun entry -> + H.div + [| HA.class_ "g-ContextMenu__Entry" + ; HE.on_click (fun _ -> entry.action ()) + |] + [| H.text entry.label |]) + actions) + in + let () = Element.append_child Document.body menu in + + (* Remove on click or context menu *) + let _ = + Js.Global.setTimeout + (fun _ -> + let rec f = (fun _ -> + let () = Element.remove_child Document.body menu in + let () = Element.remove_event_listener Document.body "click" f in + Element.remove_event_listener Document.body "contextmenu" f) + in + let () = Element.add_event_listener Document.body "click" f in + Element.add_event_listener Document.body "contextmenu" f + ) + 0 + in + () -- cgit v1.2.3