Skip to content

Commit cadd27d

Browse files
committed
First take at wikilink interations
1 parent 161ceb8 commit cadd27d

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/nextjournal/clerk/doc.clj

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,3 +196,31 @@
196196

197197
#_(deref nextjournal.clerk.webserver/!doc)
198198

199+
(defn resolve-internal-link [link]
200+
(viewer/resolve-internal-link (cond->> link
201+
(and (not (qualified-symbol? (symbol link))) @!active-ns)
202+
(str @!active-ns "/"))))
203+
204+
(def custom-markdown-viewers
205+
[{:name :nextjournal.markdown/internal-link
206+
:transform-fn (comp clerk/mark-presented
207+
(fn [wv]
208+
(when-some [info (-> wv :nextjournal/value :text resolve-internal-link)]
209+
(-> info
210+
(viewer/update-if :var symbol)
211+
(viewer/update-if :ns ns-name)))))
212+
:render-fn '(fn [{:keys [var ns]} _]
213+
[:a {:href (str "#" var)
214+
:on-click (fn [e] (.stopPropagation e) (.preventDefault e)
215+
(when (and var ns)
216+
(let [scroll-to-target #(when-some [el (js/document.getElementById (name var))]
217+
(.scrollIntoView el))]
218+
(if (not= @!active-ns (str ns))
219+
(do (reset! !active-ns (str ns))
220+
(js/setTimeout scroll-to-target 500)) ;; TODO: smarter
221+
(scroll-to-target)))))} (str var)])}])
222+
223+
(def custom-internal-links
224+
(update viewer/markdown-viewer :add-viewers viewer/add-viewers custom-markdown-viewers))
225+
226+
(viewer/add-viewers! [custom-internal-links])

src/nextjournal/clerk/viewer.cljc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1333,7 +1333,7 @@
13331333
hide-result-viewer])
13341334

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

0 commit comments

Comments
 (0)