Skip to content

Instantly share code, notes, and snippets.

@twashing
Last active August 29, 2015 14:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save twashing/d95c7b9506d2900f1e23 to your computer and use it in GitHub Desktop.
Save twashing/d95c7b9506d2900f1e23 to your computer and use it in GitHub Desktop.
Austin Browser Repl Component
(ns bkell.component.browserrepl
(:require [com.stuartsierra.component :as component]
[taoensso.timbre :as timbre]))
;; Creating aa Austin repl-env inside of a component (I call it browserrepl)
(defn create-repl-env [host]
(reset! cemerick.austin.repls/browser-repl-env (cemerick.austin/repl-env :host host)) )
(defrecord BrowserRepl [env]
component/Lifecycle
(start [component]
(timbre/debug "BrowserRepl.start CALLED / env[" (keys env) "] / component[" (keys component) "]")
(if-not (:repl-env component)
(assoc component :repl-env (create-repl-env (:host env)))
component))
(stop [component]
(timbre/trace "BrowserRepl.stop CALLED")
(dissoc component :repl-env)))
(defn component-browserrepl [env]
(map->BrowserRepl {:env env}))
(ns your.namespace
(:require [clojure.string :as str]
[net.cgrand.enlive-html :as enlive]
[taoensso.timbre :as timbre])
;; Use this to deliver an HTML resource, with a 'clojure.browser.repl.connect' back to your repl-env (in your browserrepl)
(defn with-browser-repl [filename browserrepl]
(timbre/trace "with-browser-repl CALLED / browserrepl[" browserrepl "]")
(let [repl-env (:repl-env browserrepl)
chopped-url (str/split (:repl-url repl-env) #"\/")
host (str "http://" (:host repl-env))
port (second (str/split (nth chopped-url 2) #":"))
sessionid (nth chopped-url 3)
templ (enlive/html-resource filename)]
(apply str (enlive/emit*
(enlive/transform templ
[:html]
(enlive/after
[{:tag :script :content (str "")}
{:tag :script :content (str "clojure.browser.repl.connect.call(null,\"" host ":" port "/" sessionid "/repl/start\");")}]))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment