Skip to content

Commit 868b6d6

Browse files
committed
document the rationale behind clojure.browser.repl/bootstrap
implementation
1 parent 704d89c commit 868b6d6

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

src/cljs/clojure/browser/repl.cljs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@
122122
(set! (.-isProvided_ js/goog) (fn [name] false))
123123
(set! (.-writeScriptTag__ js/goog)
124124
(fn [src opt_sourceText]
125+
;; the page is already loaded, we can no longer leverage document.write
126+
;; instead construct script tag elements and append them to the body
127+
;; of the page, to avoid parallel script loading enforce sequential
128+
;; load with a simple load queue
125129
(let [loaded (atom false)
126130
onload (fn []
127131
(when (and load-queue (false? @loaded))
@@ -130,21 +134,24 @@
130134
(set! load-queue nil)
131135
(.apply js/goog.writeScriptTag__ nil (.shift load-queue)))))]
132136
(.appendChild js/document.body
133-
(as-> (.createElement js/document "script") script
134-
(doto script
135-
(aset "type" "text/javascript")
136-
(aset "onload" onload)
137-
(aset "onreadystatechange" onload))
138-
(if (nil? opt_sourceText)
139-
(doto script (aset "src" src))
140-
(doto script (gdom/setTextContext opt_sourceText))))))))
137+
(as-> (.createElement js/document "script") script
138+
(doto script
139+
(aset "type" "text/javascript")
140+
(aset "onload" onload)
141+
(aset "onreadystatechange" onload)) ;; IE
142+
(if (nil? opt_sourceText)
143+
(doto script (aset "src" src))
144+
(doto script (gdom/setTextContext opt_sourceText))))))))
145+
;; queue or load
141146
(set! (.-writeScriptTag_ js/goog)
142147
(fn [src opt_sourceText]
143148
(if load-queue
144149
(.push load-queue #js [src opt_sourceText])
145150
(do
146151
(set! load-queue #js [])
147152
(js/goog.writeScriptTag__ src opt_sourceText)))))
153+
;; we must reuse Closure library dev time dependency management, under namespace
154+
;; reload scenarios we simply delete entries from the correct private locations
148155
(set! (.-require js/goog)
149156
(fn [src reload]
150157
(when (= reload "reload-all")

0 commit comments

Comments
 (0)