           (.append "line")
           (.attr "class" "link")
           (.style "stroke" "#C9CBCB")
-          (.style "stroke-width" 3))
+          (.style "stroke-width" 3)
+          (.each
+            (fn [link]
+              (this-as elem (add-tap-listener elem #(link-tap-signaller link))))))
       (-> link-selection
           maybe-transition
           (.attr "x1" #(-> % :source positions :x))

        (.recognizeWith (.get manager "pan")))
    (-> manager (.add (js/Hammer.Pinch.))
        (.recognizeWith (.get manager "pan")))
    (-> manager (.add (js/Hammer.Tap.)))
    manager))

(defn gesture-observable [manager svg gesture]

  (if (= (:projection state) :fisheye) fisheye-projectors zoom-out-projectors))

;; D3 magic

(defn add-tap-listener [elem callback]
  (let [manager (js/Hammer.Manager. elem)]
    (.add manager (js/Hammer.Tap.))
    (.on manager "tap" callback)))

(defn sync-graph! [state & {:keys [animate?]}]
  (let [{:keys [svg
