|
5 | 5 | syntaxHighlighting]]
|
6 | 6 | ["@codemirror/state" :refer [EditorState]]
|
7 | 7 | ["@codemirror/view" :refer [EditorView keymap]]
|
8 |
| - ["katex" :as katex] |
9 | 8 | ["react" :as react]
|
10 | 9 | [clojure.string :as str]
|
11 | 10 | [nextjournal.clerk.render :as render]
|
|
76 | 75 | (react/isValidElement result) result
|
77 | 76 | :else [render/inspect result]))]]))
|
78 | 77 |
|
79 |
| -(def renderers |
| 78 | +(defn renderers [katex] |
80 | 79 | (assoc md.transform/default-hiccup-renderers
|
81 | 80 | :code (fn [_ctx node] [clojure-editor {:doc (md.transform/->text node)}])
|
82 | 81 | :todo-item (fn [ctx {:as node :keys [attrs]}]
|
83 | 82 | (md.transform/into-markup [:li [:input {:type "checkbox" :default-checked (:checked attrs)}]] ctx node))
|
84 | 83 | :formula (fn [_ctx node]
|
85 |
| - [:span {:dangerouslySetInnerHTML {:__html (.renderToString katex (md.transform/->text node))}}]) |
| 84 | + [:span {:dangerouslySetInnerHTML (r/unsafe-html (.renderToString katex (md.transform/->text node)))}]) |
86 | 85 | :block-formula (fn [_ctx node]
|
87 |
| - [:div {:dangerouslySetInnerHTML {:__html (.renderToString katex (md.transform/->text node) #js {:displayMode true})}}]))) |
| 86 | + [:div {:dangerouslySetInnerHTML (r/unsafe-html (.renderToString katex (md.transform/->text node) #js {:displayMode true}))}]))) |
88 | 87 |
|
89 | 88 | (defn inspect-expanded [x]
|
90 | 89 | (r/with-let [expanded-at (r/atom {:hover-path [] :prompt-multi-expand? false})]
|
91 | 90 | (render/inspect-presented {:!expanded-at expanded-at}
|
92 | 91 | (v/present x))))
|
93 | 92 |
|
94 |
| -(defn try-markdown [init-text] |
95 |
| - (let [text->state (fn [text] |
| 93 | + |
| 94 | + |
| 95 | +(defn try-markdown* [{:keys [init-text katex]}] |
| 96 | + (let [text->state (fn [katex text] |
96 | 97 | (let [parsed (md/parse text)]
|
97 | 98 | {:parsed parsed
|
98 |
| - :hiccup (nextjournal.markdown.transform/->hiccup renderers parsed)})) |
99 |
| - !state (hooks/use-state (text->state init-text))] |
| 99 | + :hiccup (nextjournal.markdown.transform/->hiccup (renderers katex) parsed)})) |
| 100 | + !state (hooks/use-state (text->state katex init-text))] |
100 | 101 | [:div.grid.grid-cols-2.m-10
|
101 | 102 | [:div.m-2.p-2.text-xl.border-2.overflow-y-scroll.bg-slate-100 {:style {:height "20rem"}}
|
102 |
| - [editor {:doc init-text :on-change #(reset! !state (text->state %)) :lang :markdown}]] |
| 103 | + [editor {:doc init-text :on-change #(reset! !state (text->state katex %)) :lang :markdown}]] |
103 | 104 | [:div.m-2.p-2.font-medium.overflow-y-scroll {:style {:height "20rem"}}
|
104 | 105 | [inspect-expanded (:parsed @!state)]]
|
105 | 106 | [:div.m-2.p-2.overflow-x-scroll
|
106 | 107 | [inspect-expanded (:hiccup @!state)]]
|
107 | 108 | [:div.m-2.p-2.bg-slate-50.viewer-markdown
|
108 | 109 | [v/html (:hiccup @!state)]]]))
|
| 110 | + |
| 111 | +(defn try-markdown [init-text] |
| 112 | + ( let [katex ( hooks/use-d3-require "[email protected]")] |
| 113 | + (when katex |
| 114 | + [try-markdown* {:init-text init-text |
| 115 | + :katex katex}]))) |
0 commit comments