Last active
January 11, 2018 18:30
-
-
Save iperdomo/44911ee4ceaafa472338155edc992cbc to your computer and use it in GitHub Desktop.
Google Maps delete vertex sample in ClojureScript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; 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