Skip to content

Commit 3e6c072

Browse files
author
dnolen
committed
fix browser REPL based on debugging session with Kovas Boguta
patching `goog.require` is the wrong approach for browsers. It will fail when loading a dependency graph the browser has not already seen. Instead patch `goog.provide` so it doesn't throw and suppress errors from `goog.writeScriptTag_` when writing to the document after the page has loaded.
1 parent b721daf commit 3e6c072

File tree

1 file changed

+16
-20
lines changed

1 file changed

+16
-20
lines changed

src/cljs/clojure/browser/repl.cljs

+16-20
Original file line numberDiff line numberDiff line change
@@ -113,24 +113,20 @@
113113
(fn [iframe]
114114
(set! (.-display (.-style iframe))
115115
"none")))
116-
;; Monkey-patch goog.require if running under optimizations :none - David
116+
;; Monkey-patch goog.provide if running under optimizations :none - David
117117
(when-not js/COMPILED
118-
(set! *loaded-libs*
119-
(let [gntp (.. js/goog -dependencies_ -nameToPath)]
120-
(into #{}
121-
(filter
122-
(fn [name]
123-
(aget (.. js/goog -dependencies_ -visited) (aget gntp name)))
124-
(js-keys gntp)))))
125-
(set! (.-isProvided_ js/goog) (fn [_] false))
126-
(set! (.-require js/goog)
127-
(fn [name reload]
128-
(when (or (not (contains? *loaded-libs* name)) reload)
129-
(set! *loaded-libs* (conj (or *loaded-libs* #{}) name))
130-
(.appendChild js/document.body
131-
(let [script (.createElement js/document "script")]
132-
(set! (.-type script) "text/javascript")
133-
(set! (.-src script)
134-
(str "goog/"
135-
(aget (.. js/goog -dependencies_ -nameToPath) name)))
136-
script))))))))
118+
(set! (.-provide__ js/goog) js/goog.provide)
119+
(set! (.-isProvided___ js/goog) js/goog.isProvided_)
120+
(set! (.-provide js/goog)
121+
(fn [name]
122+
(set! (.-isProvided_ js/goog) (fn [name] false))
123+
(.provide__ js/goog name)
124+
(set! (.-isProvided_ js/goog) js/goog.isProvided___)))
125+
(set! (.-writeScriptTag_ js/goog)
126+
(fn [src opt_sourceText]
127+
(let [doc js/goog.global.document]
128+
(if (nil? opt_sourceText)
129+
(.write doc
130+
(str "<script type=\"text/javascript\" src=\"" src "\"></script>"))
131+
(.write doc
132+
(str "<script type=\"text/javascript\">" opt_sourceText "</script>")))))))))

0 commit comments

Comments
 (0)