(* BSD-2-Clause License *) type t = Jv.t let of_jv = Fun.id let to_jv = Fun.id let create_on ?(options = Jv.null) id = Jv.call Global.leaflet "map" [| Jv.of_string id; options |] let create_from_div ?(options = Jv.null) container = if Brr.El.has_tag_name Brr.El.Name.div container then Jv.call Global.leaflet "map" [| Brr.El.to_jv container; options |] else failwith "container is not a
" let invalidate_size map = let (_ : Jv.t) = Jv.call map "invalidateSize" [| Jv.true' |] in () let fit_world map = let (_ : Jv.t) = Jv.call map "fitWorld" [||] in () let get_container map = Jv.call (to_jv map) "getContainer" [||] |> Brr.El.of_jv let set_view latlng ~zoom map = let latlng = Latlng.to_jv latlng in let (_ : Jv.t) = match zoom with | None -> Jv.call map "setView" [| latlng |] | Some zoom -> Jv.call map "setView" [| latlng; Jv.of_int zoom |] in () let on : type kind. kind Event.sub -> (kind Event.t -> 'b) -> t -> unit = fun event handler map -> let name = Event.sub_to_string event in let handler v = handler @@ Event.of_jv event v in let (_ : Jv.t) = Jv.call map "on" [| Jv.of_string name; Jv.repr handler |] in () let get_center map = Latlng.of_jv @@ Jv.call map "getCenter" [||] let get_zoom map = Jv.call map "getZoom" [||] |> Jv.to_int let wrap_latlng latlng map = Latlng.of_jv @@ Jv.call map "wrapLatLng" [| Latlng.to_jv latlng |] let open_popup popup map = ignore @@ Jv.call map "openPopup" [| Popup.to_jv popup |] let close_popup popup map = ignore @@ Jv.call map "closePopup" [| Popup.to_jv popup |]