Support for src

This commit is contained in:
Michiel Borkent 2021-05-23 17:13:16 +02:00
parent 98e30dae61
commit 57c4e38f7e
4 changed files with 30 additions and 3 deletions

View file

@ -0,0 +1,2 @@
(defn foo []
(println :foo))

View file

@ -22,6 +22,7 @@
(rdom/render [my-component] (.getElementById js/document "app")) (rdom/render [my-component] (.getElementById js/document "app"))
</script> </script>
<script src="cljs/script.cljs" type="application/x-sci"></script>
</head> </head>
<body> <body>

View file

@ -8,6 +8,17 @@
(shell "clojure -M:dev -m shadow.cljs.devtools.cli release main") (shell "clojure -M:dev -m shadow.cljs.devtools.cli release main")
(def index-file (fs/file "gh-pages" "index.html")) (def index-file (fs/file "gh-pages" "index.html"))
(def cljs-source-dir (fs/file "resources" "public" "cljs"))
(def cljs-target-dir (fs/file "resources" "public" "cljs"))
(fs/create-dirs cljs-target-dir)
(run! (fn [f]
(println "Copying" (str f))
(fs/copy f
cljs-target-dir
{:replace-existing true}))
(fs/glob cljs-source-dir "*.cljs"))
(def js-source-dir (fs/file "resources" "public" "js")) (def js-source-dir (fs/file "resources" "public" "js"))
(def js-target-dir (fs/file "gh-pages" "js")) (def js-target-dir (fs/file "gh-pages" "js"))
(fs/create-dirs js-target-dir) (fs/create-dirs js-target-dir)

View file

@ -44,10 +44,23 @@
(defn merge-ctx [opts] (defn merge-ctx [opts]
(swap! ctx sci/merge-opts opts)) (swap! ctx sci/merge-opts opts))
(defn- load-contents [script-tags]
(when-first [tag script-tags]
(if-let [text (not-empty (gobject/get tag "textContent"))]
(do (eval-string text)
(load-contents (rest script-tags)))
(let [src (.getAttribute tag "src")
req (js/XMLHttpRequest.)
_ (.open req "GET" src true)
_ (gobject/set req "onload"
(fn [] (this-as this
(let [response (gobject/get this "response")]
(eval-string response))
(load-contents (rest script-tags)))))]
(.send req)))))
(js/document.addEventListener (js/document.addEventListener
"DOMContentLoaded" "DOMContentLoaded"
(fn [] (fn []
(let [script-tags (js/document.querySelectorAll "script[type='application/x-sci']")] (let [script-tags (js/document.querySelectorAll "script[type='application/x-sci']")]
(run! (fn [script-tag] (load-contents script-tags))), false)
(let [text (gobject/get script-tag "textContent")]
(eval-string text))) script-tags))), false)