Skip to content

Instantly share code, notes, and snippets.

@mattdeboard
Created September 20, 2014 00:39
Show Gist options
  • Save mattdeboard/e4e49fd5bada14d0f1da to your computer and use it in GitHub Desktop.
Save mattdeboard/e4e49fd5bada14d0f1da to your computer and use it in GitHub Desktop.
(ns chestnut.core
(:require [clojure.browser.repl]
[om.core :as om :include-macros true]
[om.dom :as dom :include-macros true]
[figwheel.client :as fw :include-macros true]))
(enable-console-print!)
(defonce app-state (atom {:text "Hello world!"}))
(extend-type js/HTMLCollection
ISeqable
(-seq [array] (array-seq array 0)))
;; Bootstrap the DOM in a browser-connected REPL so ReactJS is available
(defn repl-react-js
"Add ReactJS to browser-connected REPl session."
[] (let [head (first (. js/document (getElementsByTagName "head")))
script (. js/document (createElement "script"))]
(set! (.-type script) "text/javascript")
(set! (.-src script) "http://fb.me/react-0.11.2.js")
(. head (appendChild script))))
(defn app-div [app owner]
(reify
om/IRender
(render [this]
(dom/div #js {:id "app" :key "app"} nil))))
(defn repl-app-div
"Add app div to target with `om/root'."
[] (let [body js/document.body
app-div (. js/document (createElement "div"))]
(set! (.-id app-div) "app")
(. body (appendChild app-div))))
(om/root
(fn [app owner]
(reify
om/IRender
(render [_]
(dom/h1 nil (:text app)))))
app-state
{:target js/document.body})
(fw/watch-and-reload
:websocket-url "ws://localhost:3449/figwheel-ws"
:jsload-callback (fn [] (print "reloaded")))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment