Skip to content

Instantly share code, notes, and snippets.

@iperdomo
Last active January 11, 2018 18:30
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iperdomo/44911ee4ceaafa472338155edc992cbc to your computer and use it in GitHub Desktop.
Save iperdomo/44911ee4ceaafa472338155edc992cbc to your computer and use it in GitHub Desktop.
Google Maps delete vertex sample in ClojureScript
;; https://developers.google.com/maps/documentation/javascript/examples/delete-vertex-menu
;; New implementaion based on comments by Andre Rauh (@rauh) in #clojurescript on clojurians.slack.com
;;
(defn delete-vertex-menu
[label]
(this-as this
(let [div (dom/createElement "div")]
(set! div -className "delete-menu")
(set! div -innerHTML label)
(set! this -div div)
(.addDomListener js/google.maps.event div "click" (fn [] (.removeVertex this))))
this))
(goog.inherits delete-vertex-menu js/google.maps.OverlayView)
(extend-type delete-vertex-menu
Object
(onAdd [this]
(let [delete-menu this
map (.getMap this)]
(dom/appendChild (.-floatPane (.getPanes this)) (.-div this))
(set! this -divlstr (.addDomListener js/google.maps.event (.getDiv map) "mousedown" (fn [e]
(if (not= (.-target e) (.-div delete-menu))
(.close delete-menu))) true))))
(onRemove [this]
(.removeListener js/google.maps.event (.-divlstr this))
(.removeChild (.-parentNode (.-div this)) (.-div this)))
(close [this]
(.setMap this nil))
(draw [this]
(let [position (.get this "position")
projection (.getProjection this)]
(when (and position projection)
(let [point (.fromLatLngToDivPixel projection position)]
(set! (.-top (.-style (.-div this))) (str (.-y point) "px"))
(set! (.-left (.-style (.-div this))) (str (.-x point) "px"))))))
(open [this map path vertex]
(.set this "position" (.getAt path vertex))
(.set this "path" path)
(.set this "vertex" vertex)
(.setMap this map)
(.draw this))
(removeVertex [this]
(let [path (.get this "path")
vertex (.get this "vertex")]
(when (and path vertex)
(.removeAt path vertex))
(.close this))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment