Compare commits
2 commits
Author | SHA1 | Date | |
---|---|---|---|
|
19fe9152e7 | ||
|
2b2dc2de89 |
5
deps.edn
5
deps.edn
|
@ -2,7 +2,10 @@
|
||||||
|
|
||||||
:deps
|
:deps
|
||||||
{org.clojure/clojure {:mvn/version "1.10.3"}
|
{org.clojure/clojure {:mvn/version "1.10.3"}
|
||||||
org.babashka/sci {:mvn/version "0.3.5"}
|
org.babashka/sci #_{:mvn/version "0.3.5"}
|
||||||
|
#_{:git/url "https://github.com/babashka/sci"
|
||||||
|
:git/sha "b95519dc283bebafa3dcce01c3e9eaaa568d0fcb"}
|
||||||
|
{:local/root "../babashka/sci"}
|
||||||
reagent/reagent {:mvn/version "1.1.0"}
|
reagent/reagent {:mvn/version "1.1.0"}
|
||||||
cljsjs/react {:mvn/version "17.0.2-0"}
|
cljsjs/react {:mvn/version "17.0.2-0"}
|
||||||
cljsjs/react-dom {:mvn/version "17.0.2-0"}
|
cljsjs/react-dom {:mvn/version "17.0.2-0"}
|
||||||
|
|
|
@ -49,7 +49,11 @@
|
||||||
(let [response (gobject/get req "response")]
|
(let [response (gobject/get req "response")]
|
||||||
(set! (.-innerText code) response)
|
(set! (.-innerText code) response)
|
||||||
(.highlightElement js/hljs code))))
|
(.highlightElement js/hljs code))))
|
||||||
(.send req)))
|
(.send req)))
|
||||||
|
|
||||||
|
(set! (.-eval_input js/window) (fn []
|
||||||
|
(let [value (.-value (js/document.getElementById "myInput"))]
|
||||||
|
(js/scittle.core.eval_string value))))
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -118,6 +122,12 @@
|
||||||
Click me!
|
Click me!
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<a name="eval"></a>
|
||||||
|
<h2><a href="#eval">Evaluate</a></h2>
|
||||||
|
<textarea id="myInput" type="textarea">(ns foo (:require [bar]))
|
||||||
|
</textarea>
|
||||||
|
<button onclick="eval_input()">Eval!</button>
|
||||||
|
|
||||||
<a name="repl"></a>
|
<a name="repl"></a>
|
||||||
<h2><a href="#nrepl">REPL</a></h2>
|
<h2><a href="#nrepl">REPL</a></h2>
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
(:require [cljs.reader :refer [read-string]]
|
(:require [cljs.reader :refer [read-string]]
|
||||||
[goog.object :as gobject]
|
[goog.object :as gobject]
|
||||||
[goog.string]
|
[goog.string]
|
||||||
|
[sci.async :as scia]
|
||||||
[sci.core :as sci]
|
[sci.core :as sci]
|
||||||
[scittle.impl.common :refer [cljns]]
|
[scittle.impl.common :refer [cljns]]
|
||||||
[scittle.impl.error :as error]))
|
[scittle.impl.error :as error]))
|
||||||
|
@ -30,32 +31,29 @@
|
||||||
'get gobject/get}})
|
'get gobject/get}})
|
||||||
|
|
||||||
(def !sci-ctx (atom (sci/init {:namespaces namespaces
|
(def !sci-ctx (atom (sci/init {:namespaces namespaces
|
||||||
:classes {'js js/window
|
:classes {'js js/window
|
||||||
:allow :all}
|
:allow :all}
|
||||||
:disable-arity-checks true})))
|
:disable-arity-checks true
|
||||||
|
:async-load-fn (fn [{:keys [libname ctx opts]}]
|
||||||
|
(-> (js* (str "import('" libname "')"))
|
||||||
|
(.then (fn [mod]
|
||||||
|
(sci/add-class! ctx (:as opts) mod)))
|
||||||
|
(.then (fn [_]
|
||||||
|
{:handled true}))))})))
|
||||||
|
|
||||||
(def !last-ns (volatile! @sci/ns))
|
(def !last-ns (volatile! @sci/ns))
|
||||||
|
|
||||||
(defn- -eval-string [s]
|
(defn- -eval-string [s]
|
||||||
(sci/binding [sci/ns @!last-ns]
|
(scia/eval-string* @!sci-ctx s))
|
||||||
(let [rdr (sci/reader s)]
|
|
||||||
(loop [res nil]
|
|
||||||
(let [form (sci/parse-next @!sci-ctx rdr)]
|
|
||||||
(if (= :sci.core/eof form)
|
|
||||||
(do
|
|
||||||
(vreset! !last-ns @sci/ns)
|
|
||||||
res)
|
|
||||||
(recur (sci/eval-form @!sci-ctx form))))))))
|
|
||||||
|
|
||||||
(defn ^:export eval-string [s]
|
(defn ^:export eval-string [s]
|
||||||
(try (-eval-string s)
|
(.catch (-eval-string s)
|
||||||
(catch :default e
|
(fn [e]
|
||||||
(error/error-handler e (:src @!sci-ctx))
|
(error/error-handler e (:src @!sci-ctx))
|
||||||
(let [sci-error? (isa? (:type (ex-data e)) :sci/error)]
|
(let [sci-error? (isa? (:type (ex-data e)) :sci/error)]
|
||||||
(throw (if sci-error?
|
(throw (if sci-error?
|
||||||
(or (ex-cause e) e)
|
(or (ex-cause e) e)
|
||||||
e))))))
|
e))))))
|
||||||
|
|
||||||
(defn register-plugin! [plug-in-name sci-opts]
|
(defn register-plugin! [plug-in-name sci-opts]
|
||||||
plug-in-name ;; unused for now
|
plug-in-name ;; unused for now
|
||||||
|
@ -67,9 +65,9 @@
|
||||||
(let [scittle-id (str (gensym "scittle-tag-"))]
|
(let [scittle-id (str (gensym "scittle-tag-"))]
|
||||||
(gobject/set tag "scittle_id" scittle-id)
|
(gobject/set tag "scittle_id" scittle-id)
|
||||||
(swap! !sci-ctx assoc-in [:src scittle-id] text)
|
(swap! !sci-ctx assoc-in [:src scittle-id] text)
|
||||||
(sci/binding [sci/file scittle-id]
|
(-> (sci/binding [sci/file scittle-id]
|
||||||
(eval-string text))
|
(eval-string text))
|
||||||
(eval-script-tags* (rest script-tags)))
|
(.then #(eval-script-tags* (rest script-tags)))))
|
||||||
(let [src (.getAttribute tag "src")
|
(let [src (.getAttribute tag "src")
|
||||||
req (js/XMLHttpRequest.)
|
req (js/XMLHttpRequest.)
|
||||||
_ (.open req "GET" src true)
|
_ (.open req "GET" src true)
|
||||||
|
@ -79,9 +77,9 @@
|
||||||
(gobject/set tag "scittle_id" src)
|
(gobject/set tag "scittle_id" src)
|
||||||
;; save source for error messages
|
;; save source for error messages
|
||||||
(swap! !sci-ctx assoc-in [:src src] response)
|
(swap! !sci-ctx assoc-in [:src src] response)
|
||||||
(sci/binding [sci/file src]
|
(-> (sci/binding [sci/file src]
|
||||||
(eval-string response)))
|
(eval-string response))
|
||||||
(eval-script-tags* (rest script-tags)))))]
|
(.then #(eval-script-tags* (rest script-tags))))))))]
|
||||||
(.send req)))))
|
(.send req)))))
|
||||||
|
|
||||||
(defn ^:export eval-script-tags []
|
(defn ^:export eval-script-tags []
|
||||||
|
@ -103,4 +101,3 @@
|
||||||
|
|
||||||
(enable-console-print!)
|
(enable-console-print!)
|
||||||
(sci/alter-var-root sci/print-fn (constantly *print-fn*))
|
(sci/alter-var-root sci/print-fn (constantly *print-fn*))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue