File tree Expand file tree Collapse file tree 5 files changed +51
-21
lines changed Expand file tree Collapse file tree 5 files changed +51
-21
lines changed Original file line number Diff line number Diff line change 22 " Clerk's Public API."
33 (:refer-clojure :exclude [comment])
44 (:require [babashka.fs :as fs]
5- [clojure.java.browse :as browse]
65 [clojure.java.io :as io]
76 [clojure.set :as set]
87 [clojure.string :as str]
476475 (reset! !watcher {:paths watch-paths
477476 :watcher (apply beholder/watch #(file-event %) watch-paths)}))
478477 (when browse?
479- (let [{:keys [host port]} @webserver/!server]
480- (browse/browse-url (format " http://%s:%s" host port))))))
478+ (webserver/browse! ))))
481479 config )
482480
483481#_(serve! (with-meta {:help true } {:org.babashka/cli {}}))
Original file line number Diff line number Diff line change 117117 (when (= stage :init )
118118 (builder-ui/reset-build-state! )
119119 ((resolve 'nextjournal.clerk/show!) (find-ns 'nextjournal.clerk.builder-ui))
120- (when-let [{ :keys [port]} ( and ( get-in build-event [:build-opts :browse ]) @webserver/!server)]
121- (browse /browse-url ( str " http://localhost: " port) )))
120+ (when ( get-in build-event [:build-opts :browse ])
121+ (webserver /browse! )))
122122 (stdout-reporter build-event)
123123 (builder-ui/add-build-event! build-event)
124124 (binding [*out* (java.io.StringWriter. )]
208208 (cond-> ssr? ssr!)
209209 cleanup))))))
210210 (when browse?
211- (browse/browse-url (if-let [{ :keys [port]} (and (= out-path " public/build" ) @ webserver/! server)]
212- (str " http://localhost: " port " /build/" )
211+ (browse/browse-url (if-let [server-url (and (= out-path " public/build" ) ( webserver/server-url ) )]
212+ (str server-url " /build/" )
213213 (-> index-html fs/absolutize .toString path-to-url-canonicalize))))
214214 {:docs docs
215215 :index-html index-html
Original file line number Diff line number Diff line change 689689 (if error (reject error) (resolve reply)))
690690 (js/console.warn :process-eval-reply!/not-found :eval-id eval-id :keys (keys @!pending-clerk-eval-replies))))
691691
692- (defn ^:export dispatch [{:as msg :keys [type]}]
693- (let [dispatch-fn (get {:patch-state! patch-state!
694- :set-state! set-state!
695- :eval-reply process-eval-reply!}
696- type
697- (fn [_]
698- (js/console.warn (str " no on-message dispatch for type `" type " `" ))))]
699- #_(js/console.log :<= type := msg)
700- (dispatch-fn msg)))
701-
702692(defonce container-el
703693 (and (exists? js/document) (js/document.getElementById " clerk" )))
704694
Original file line number Diff line number Diff line change 173173 'system-time (sci/copy-var system-time core-ns)}}
174174 (sci-copy-nss
175175 'cljs.math
176+ 'cljs.repl
176177 'nextjournal.clerk.parser
177178 'nextjournal.clerk.render
178179 'nextjournal.clerk.render.code
187188 sci.configs.js-interop/namespaces
188189 sci.configs.reagent/namespaces)})
189190
190- (defn ^:export onmessage [ws-msg]
191- (render/dispatch (read-string (.-data ws-msg))))
192-
193191(defn ^:export eval-form [f]
194192 (sci/eval-form (sci.ctx-store/get-ctx ) f))
195193
194+ (defn render-eval [{:keys [form]}]
195+ (eval-form form))
196+
197+ (def message-type->fn
198+ {:patch-state! render/patch-state!
199+ :set-state! render/set-state!
200+ :eval-reply render/process-eval-reply!
201+ :render-eval render-eval})
202+
203+ (defn ^:export onmessage [ws-msg]
204+ (let [{:as msg :keys [type]} (read-string (.-data ws-msg))
205+ dispatch-fn (get message-type->fn
206+ type
207+ (fn [_]
208+ (js/console.warn (str " no on-message dispatch for type `" type " `" ))))]
209+ #_(js/console.log :<= type := msg)
210+ (dispatch-fn msg)))
211+
196212(def ^:export init render /init )
197213
198214(defn ^:export ssr [state-str]
Original file line number Diff line number Diff line change 11(ns nextjournal.clerk.webserver
22 (:require [babashka.fs :as fs]
33 [clojure.edn :as edn]
4+ [clojure.java.browse :as browse]
45 [clojure.java.io :as io]
56 [clojure.pprint :as pprint]
67 [clojure.set :as set]
2526
2627(def ^:dynamic *sender-ch* nil )
2728
29+ (defn server-url []
30+ (when-let [{:keys [host port]} @!server]
31+ (format " http://%s:%s" host port)))
32+
33+ (defn ex-server-not-running []
34+ (Exception. " no server running, please run `(nextjournal.clerk/serve! {})` and try again." ))
35+
36+ (defn browse! []
37+ (if-let [server-url (server-url )]
38+ (browse/browse-url server-url)
39+ (throw (ex-server-not-running ))))
40+
41+ #_(browse! )
42+
2843(defn send! [ch msg]
2944 (httpkit/send! ch (v/->edn msg)))
3045
3651 (httpkit/send! ch (v/->edn msg)))
3752 (reset! !last-sender-ch *sender-ch*))
3853
39- #_(broadcast! [{:random (rand-int 10000 ) :range (range 100 )}])
54+ #_(broadcast! [])
55+
56+ (defn render-eval
57+ " Evaluates the given `form` in Clerk's render environment in the browser."
58+ [form]
59+ (if-let [client (first @!clients)]
60+ (send! client {:type :render-eval :form form})
61+ (if (server-url )
62+ (throw (ex-info (format " no client connected, please open %s in a browser and try again." (server-url )) {:clients @!clients}))
63+ (throw (ex-server-not-running )))))
64+
65+ #_(render-eval '(js/console.log :foo ))
4066
4167(defn ^:private percent-decode [s]
4268 (java.net.URLDecoder/decode s java.nio.charset.StandardCharsets/UTF_8))
You can’t perform that action at this time.
0 commit comments