Skip to content

Commit 2bed6af

Browse files
committed
Override behaviour for regular links
1 parent 1d41c51 commit 2bed6af

File tree

3 files changed

+54
-27
lines changed

3 files changed

+54
-27
lines changed

src/nextjournal/clerk.clj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
"Clerk's Public API.
33
44
Further API:
5-
* [[nextjournal.clerk.parser]]
6-
* [[nextjournal.clerk.viewer]]
7-
* [[nextjournal.clerk.analyzer]]"
5+
* [Parsing](nextjournal.clerk.parser)
6+
* [Viewers API](nextjournal.clerk.viewer)
7+
* [Static analysis and caching](nextjournal.clerk.analyzer)"
88
(:require [babashka.fs :as fs]
99
[clojure.java.browse :as browse]
1010
[clojure.java.io :as io]

src/nextjournal/clerk/doc.clj

Lines changed: 50 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
{:nextjournal.clerk/visibility {:code :hide :result :hide}}
44
(:require [clojure.string :as str]
55
[nextjournal.clerk :as clerk]
6-
[nextjournal.clerk.viewer :as viewer]))
6+
[nextjournal.clerk.viewer :as viewer]
7+
[nextjournal.markdown.transform :as md.transform]))
78

89
(def render-input
910
'(fn [!query]
@@ -202,32 +203,58 @@
202203
(not (qualified-symbol? (symbol link))))
203204
(str @!active-ns "/"))))
204205

206+
(defn spy [x] (println :x (str "'" x "'")
207+
:t (type x)
208+
:ns (ns-name *ns*)) x)
209+
210+
^::clerk/no-cache
211+
(clerk/eval-cljs
212+
'(defn handle-click [{:keys [label var ns]} e]
213+
(js/console.log :handle-click/ns ns :var var)
214+
(.stopPropagation e) (.preventDefault e)
215+
(when (resolve '!active-ns)
216+
(let [scroll-to-target (fn []
217+
(if var
218+
(when-some [el (js/document.getElementById (name var))]
219+
(.scrollIntoView el))
220+
(when ns
221+
(when-some [page (js/document.getElementById "main-column")]
222+
(.scroll page (applied-science.js-interop/obj :top 0))))))]
223+
(when ns
224+
(if (not= @!active-ns (str ns))
225+
(do (reset! !active-ns (str ns))
226+
(js/setTimeout scroll-to-target 500)) ;; TODO: smarter
227+
(scroll-to-target)))))))
228+
229+
^::clerk/no-cache
230+
(clerk/eval-cljs
231+
'(defn render-link [{:as info :keys [label]} _]
232+
[:a {:href "#" :on-click (partial handle-click info)} label]))
233+
234+
(def get-info
235+
(comp clerk/mark-presented
236+
(fn [wv]
237+
(let [{:as node :keys [type text attrs]} (-> wv :nextjournal/value)]
238+
(when-some [{:as info :keys [ns var]}
239+
(some-> (resolve-internal-link (case type :internal-link text :link (:href attrs)))
240+
(viewer/update-if :ns ns-name)
241+
(viewer/update-if :var symbol))]
242+
(assoc info :label
243+
(str (case type
244+
:internal-link (or var ns)
245+
:link (md.transform/->text node)))))))))
246+
205247
(def custom-markdown-viewers
206248
[{:name :nextjournal.markdown/internal-link
207-
:transform-fn (comp clerk/mark-presented
208-
(fn [wv]
209-
(when-some [info (-> wv :nextjournal/value :text resolve-internal-link)]
210-
(-> info
211-
(viewer/update-if :var symbol)
212-
(viewer/update-if :ns ns-name)))))
213-
:render-fn '(fn [{:keys [var ns]} _]
214-
[:a {:href (str "#" var)
215-
:on-click (fn [e] (.stopPropagation e) (.preventDefault e)
216-
(when (resolve '!active-ns)
217-
(let [scroll-to-target (fn []
218-
(if var
219-
(when-some [el (js/document.getElementById (name var))]
220-
(.scrollIntoView el))
221-
(when ns
222-
(when-some [page (js/document.getElementById "main-column")]
223-
(.scroll page (applied-science.js-interop/obj :top 0))))))]
224-
(when ns
225-
(if (not= @!active-ns (str ns))
226-
(do (reset! !active-ns (str ns))
227-
(js/setTimeout scroll-to-target 500)) ;; TODO: smarter
228-
(scroll-to-target))))))} (str (or var ns))])}])
249+
:render-fn 'render-link
250+
:transform-fn get-info}
251+
{:name :nextjournal.markdown/link
252+
:render-fn 'render-link
253+
:transform-fn get-info}])
229254

230255
(def custom-internal-links
231256
(update viewer/markdown-viewer :add-viewers viewer/add-viewers custom-markdown-viewers))
232257

233258
(viewer/add-viewers! [custom-internal-links])
259+
260+
#_(clerk/clear-cache!)

src/nextjournal/clerk/viewer.cljc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1335,7 +1335,7 @@
13351335
hide-result-viewer])
13361336

13371337
(defonce
1338-
^{:doc "atom containing a map of and per-namespace viewers or `:defaults` overridden viewers. See also [[get-default-viewers]]."}
1338+
^{:doc "An atom containing a map of per-namespace viewers or `:default` overridden viewers. See also how to [get default viewers](get-default-viewers)."}
13391339
!viewers
13401340
(#?(:clj atom :cljs ratom/atom) {}))
13411341

0 commit comments

Comments
 (0)