Skip to content

Commit c781315

Browse files
authored
Fix reagent unsafe html rendering (#760)
Fixes #759.
1 parent 07e8e94 commit c781315

File tree

3 files changed

+38
-33
lines changed

3 files changed

+38
-33
lines changed

src/nextjournal/clerk/render.cljs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@
922922

923923
(defn render-html [markup]
924924
(r/as-element (if (string? markup)
925-
[:span {:dangerouslySetInnerHTML {:__html markup}}]
925+
[:span {:dangerouslySetInnerHTML (r/unsafe-html markup)}]
926926
markup)))
927927

928928
(defn render-promise [p opts]
@@ -981,9 +981,10 @@
981981
default-loading-view))))
982982

983983
(defn render-katex [tex-string {:keys [inline?]}]
984+
(prn :text-string tex-string :inline inline?)
984985
(let [katex (hooks/use-d3-require "katex@0.16.4")]
985986
(if katex
986-
[:span {:dangerouslySetInnerHTML {:__html (.renderToString katex tex-string (j/obj :displayMode (not inline?) :throwOnError false))}}]
987+
[:span {:dangerouslySetInnerHTML (r/unsafe-html (.renderToString katex tex-string (j/obj :displayMode (not inline?) :throwOnError false)))}]
987988
default-loading-view)))
988989

989990
(defn render-mathjax [value]

src/nextjournal/clerk/sci_env.cljs

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,12 @@
3535
[nextjournal.clojure-mode.keymap]
3636
[nextjournal.markdown]
3737
[nextjournal.markdown.transform]
38+
[reagent.core :as r]
3839
[reagent.dom.server :as dom-server]
3940
[reagent.ratom :as ratom]
4041
[sci.configs.applied-science.js-interop :as sci.configs.js-interop]
41-
[sci.configs.reagent.reagent :as sci.configs.reagent]
4242
[sci.configs.cljs.pprint :as sci.configs.pprint]
43+
[sci.configs.reagent.reagent :as sci.configs.reagent]
4344
[sci.core :as sci]
4445
[sci.ctx-store]
4546
[sci.nrepl.server :as nrepl]
@@ -166,36 +167,37 @@
166167
:ns-aliases '{clojure.math cljs.math
167168
cljs.repl clojure.repl
168169
clojure.pprint cljs.pprint}
169-
:namespaces (merge {'nextjournal.clerk.viewer viewer-namespace
170-
'nextjournal.clerk viewer-namespace ;; TODO: expose cljs variant of `nextjournal.clerk` with docstrings
171-
'nextjournal.clerk.sci-env {'load-string+
170+
:namespaces (-> (merge {'nextjournal.clerk.viewer viewer-namespace
171+
'nextjournal.clerk viewer-namespace ;; TODO: expose cljs variant of `nextjournal.clerk` with docstrings
172+
'nextjournal.clerk.sci-env {'load-string+
172173

173-
load-string+}
174-
'clojure.core {'read-string read-string
175-
'implements? (sci/copy-var implements?* core-ns)
176-
'time (sci/copy-var time core-ns)
177-
'system-time (sci/copy-var system-time core-ns)}
178-
'clojure.repl {'pst pst-stub}}
179-
(sci-copy-nss
180-
'cljs.math
181-
'cljs.repl
182-
'nextjournal.clerk.parser
183-
'nextjournal.clerk.render
184-
'nextjournal.clerk.render.code
185-
'nextjournal.clerk.render.editor
186-
'nextjournal.clerk.render.hooks
187-
'nextjournal.clerk.render.navbar
188-
'nextjournal.clerk.render.table
189-
'nextjournal.clojure-mode
190-
'nextjournal.clojure-mode.keymap
191-
'nextjournal.clojure-mode.commands
192-
'nextjournal.clojure-mode.extensions.eval-region
193-
'nextjournal.markdown
194-
'nextjournal.markdown.transform)
174+
load-string+}
175+
'clojure.core {'read-string read-string
176+
'implements? (sci/copy-var implements?* core-ns)
177+
'time (sci/copy-var time core-ns)
178+
'system-time (sci/copy-var system-time core-ns)}
179+
'clojure.repl {'pst pst-stub}}
180+
(sci-copy-nss
181+
'cljs.math
182+
'cljs.repl
183+
'nextjournal.clerk.parser
184+
'nextjournal.clerk.render
185+
'nextjournal.clerk.render.code
186+
'nextjournal.clerk.render.editor
187+
'nextjournal.clerk.render.hooks
188+
'nextjournal.clerk.render.navbar
189+
'nextjournal.clerk.render.table
190+
'nextjournal.clojure-mode
191+
'nextjournal.clojure-mode.keymap
192+
'nextjournal.clojure-mode.commands
193+
'nextjournal.clojure-mode.extensions.eval-region
194+
'nextjournal.markdown
195+
'nextjournal.markdown.transform)
195196

196-
sci.configs.js-interop/namespaces
197-
sci.configs.reagent/namespaces
198-
sci.configs.pprint/namespaces)})
197+
sci.configs.js-interop/namespaces
198+
sci.configs.reagent/namespaces
199+
sci.configs.pprint/namespaces)
200+
(assoc-in ['reagent.core 'unsafe-html] r/unsafe-html))})
199201

200202
(defn ^:export eval-form [f]
201203
(sci/binding [sci/ns @last-ns]

src/nextjournal/clerk/viewer.cljc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -819,7 +819,9 @@
819819
;; formulas
820820
{:name :nextjournal.markdown/formula
821821
:transform-fn (comp :text ->value)
822-
:render-fn '(fn [tex] (nextjournal.clerk.render/render-katex tex {:inline? true}))}
822+
:render-fn '(fn [tex]
823+
(prn :tex tex)
824+
(nextjournal.clerk.render/render-katex tex {:inline? true}))}
823825
{:name :nextjournal.markdown/block-formula
824826
:transform-fn (comp :text ->value)
825827
:render-fn 'nextjournal.clerk.render/render-katex}
@@ -1031,7 +1033,7 @@
10311033
:nextjournal/value
10321034
(fn [hiccup]
10331035
(if (string? hiccup)
1034-
[:div {:dangerouslySetInnerHTML {:__html hiccup}}]
1036+
hiccup
10351037
(w/postwalk (fn [x] (if (wrapped-value? x)
10361038
[(inspect-fn)
10371039
(present (inherit-opts wrapped-value x (swap! !path-idx inc)))]

0 commit comments

Comments
 (0)