|
901 | 901 | :transform-fn (comp #?(:cljs var->symbol :clj symbol) ->value)
|
902 | 902 | :render-fn '(fn [x] [:span.inspected-value [:span.cmt-meta "#'" (str x)]])})
|
903 | 903 |
|
| 904 | +(defn ->opts [wrapped-value] |
| 905 | + (select-keys wrapped-value [:nextjournal/budget :nextjournal/css-class :nextjournal/width :nextjournal/render-opts |
| 906 | + :nextjournal/render-evaluator |
| 907 | + :!budget :store!-wrapped-value :present-elision-fn :path :offset])) |
| 908 | + |
| 909 | +(defn inherit-opts [{:as wrapped-value :nextjournal/keys [viewers]} value path-segment] |
| 910 | + (-> (ensure-wrapped-with-viewers viewers value) |
| 911 | + (merge (select-keys (->opts wrapped-value) [:!budget :store!-wrapped-value :present-elision-fn :nextjournal/budget :path])) |
| 912 | + (update :path (fnil conj []) path-segment))) |
| 913 | + |
| 914 | +(defn present-ex-data [parent throwable-map] |
| 915 | + (let [present-child (fn [idx data] (present (inherit-opts parent data idx)))] |
| 916 | + (-> throwable-map |
| 917 | + (update-if :data (partial present-child 0)) |
| 918 | + (update-if :via (fn [exs] |
| 919 | + (mapv (fn [i ex] (update-if ex :data (partial present-child (inc i)))) |
| 920 | + (range (count exs)) |
| 921 | + exs)))))) |
| 922 | + |
904 | 923 | (def throwable-viewer
|
905 | 924 | {:name `throwable-viewer
|
906 | 925 | :render-fn 'nextjournal.clerk.render/render-throwable
|
907 | 926 | :pred (fn [e] (instance? #?(:clj Throwable :cljs js/Error) e))
|
908 |
| - :transform-fn (comp mark-presented (update-val (comp demunge-ex-data |
909 |
| - datafy/datafy)))}) |
| 927 | + :transform-fn (fn [wrapped-value] |
| 928 | + (-> wrapped-value |
| 929 | + mark-presented |
| 930 | + (update :nextjournal/value (comp demunge-ex-data |
| 931 | + (partial present-ex-data wrapped-value) |
| 932 | + datafy/datafy))))}) |
910 | 933 |
|
911 | 934 | #?(:clj
|
912 | 935 | (defn buffered-image->bytes [^BufferedImage image]
|
|
957 | 980 | (def mathjax-viewer
|
958 | 981 | {:name `mathjax-viewer :render-fn 'nextjournal.clerk.render/render-mathjax :transform-fn mark-presented})
|
959 | 982 |
|
960 |
| -(defn ->opts [wrapped-value] |
961 |
| - (select-keys wrapped-value [:nextjournal/budget :nextjournal/css-class :nextjournal/width :nextjournal/render-opts |
962 |
| - :nextjournal/render-evaluator |
963 |
| - :!budget :store!-wrapped-value :present-elision-fn :path :offset])) |
964 |
| - |
965 |
| -(defn inherit-opts [{:as wrapped-value :nextjournal/keys [viewers]} value path-segment] |
966 |
| - (-> (ensure-wrapped-with-viewers viewers value) |
967 |
| - (merge (select-keys (->opts wrapped-value) [:!budget :store!-wrapped-value :present-elision-fn :nextjournal/budget :path])) |
968 |
| - (update :path (fnil conj []) path-segment))) |
969 |
| - |
970 |
| - |
971 | 983 | (defn transform-html [{:as wrapped-value :keys [path]}]
|
972 | 984 | (let [!path-idx (atom -1)]
|
973 | 985 | (update wrapped-value
|
|
1254 | 1266 | :transform-fn transform-toc
|
1255 | 1267 | :render-fn 'nextjournal.clerk.render.navbar/render-items})
|
1256 | 1268 |
|
| 1269 | +(defn present-error [error] |
| 1270 | + {:nextjournal/presented (present error) |
| 1271 | + :nextjournal/blob-id (str (gensym "error"))}) |
| 1272 | + |
1257 | 1273 | (defn process-blocks [viewers {:as doc :keys [ns]}]
|
1258 | 1274 | (-> doc
|
1259 | 1275 | (assoc :atom-var-name->state (atom-var-name->state doc))
|
|
1278 | 1294 | :toc-visibility
|
1279 | 1295 | :header
|
1280 | 1296 | :footer])
|
1281 |
| - (update-if :error present) |
| 1297 | + (update-if :error present-error) |
1282 | 1298 | (assoc :sidenotes? (boolean (seq (:footnotes doc))))
|
1283 | 1299 | #?(:clj (cond-> ns (assoc :scope (datafy-scope ns))))))
|
1284 | 1300 |
|
|
0 commit comments