diff --git a/.drone.yml b/.drone.yml index 6cca8f4..45be869 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,12 +1,20 @@ kind: pipeline name: default steps: + - name: npm-deps + image: node + commands: + - cd reagent-reitit-demo + - npm install + #- npx shadow-cljs build app + - name: Build image: clojure:tools-deps commands: - cd reagent-reitit-demo - cp resources/public/rename-me-index.html resources/public/index.html - - clj -A:prod + - clj -Mbuild-dev release app + #- clj -A:prod - name: deploy-site pull: True diff --git a/reagent-reitit-demo/deps.edn b/reagent-reitit-demo/deps.edn index 7893f09..e2f76ae 100644 --- a/reagent-reitit-demo/deps.edn +++ b/reagent-reitit-demo/deps.edn @@ -30,4 +30,6 @@ com.bhauman/figwheel-main {:mvn/version "0.2.18"}} :paths ["src" "resources"] :aliases {:prod {:main-opts ["-m" "figwheel.main" "-bo" "dev"]} + :build-dev {:extra-deps {thheller/shadow-cljs {:mvn/version "2.23.3"}} + :main-opts ["-m" "shadow.cljs.devtools.cli"]} :dev {:extra-deps {thheller/shadow-cljs {:mvn/version "2.23.3"}}}}} diff --git a/reagent-reitit-demo/resources/public/rename-me-index.html b/reagent-reitit-demo/resources/public/rename-me-index.html index 7182c97..9c9fd8b 100644 --- a/reagent-reitit-demo/resources/public/rename-me-index.html +++ b/reagent-reitit-demo/resources/public/rename-me-index.html @@ -26,7 +26,7 @@
loading here
- + diff --git a/reagent-reitit-demo/shadow-cljs.edn b/reagent-reitit-demo/shadow-cljs.edn new file mode 100644 index 0000000..9577acc --- /dev/null +++ b/reagent-reitit-demo/shadow-cljs.edn @@ -0,0 +1,11 @@ +{ + :deps {:aliases [:dev]} + :dev-http {8080 "resources/public/"} + :source ["src" "../../components"] + :builds {:app {:output-dir "resources/public/cljs-out/" + :asset-path "." + :target :browser + :compiler-options {:infer-externs :auto + :output-feature-set :es6} + :modules {:main_bundle {:init-fn clojure-demo.core/startup!}} + :devtools {:after-load app.main/reload!}}}} diff --git a/reagent-reitit-demo/src/clojure_demo/core.cljs b/reagent-reitit-demo/src/clojure_demo/core.cljs index 710ec47..85cf505 100644 --- a/reagent-reitit-demo/src/clojure_demo/core.cljs +++ b/reagent-reitit-demo/src/clojure_demo/core.cljs @@ -1,6 +1,6 @@ (ns ^:figwheel-hooks clojure-demo.core (:require ["react-dom/client" :refer [createRoot]] - ["@codemirror/state" :as cm-state :refer [EditorState] ] + ["@codemirror/state" :as cm-state :refer [EditorState Transaction] ] ["@codemirror/view" :as cm-view :refer [EditorView ViewUpdate]] ["@codemirror/commands" :as cm-commands :refer [defaultKeymap]] ["@codemirror/theme-one-dark" :refer [oneDark]] @@ -59,22 +59,36 @@ ;(def sci-ctx (sci/empty-environment)) (sci/alter-var-root sci/print-fn (constantly *print-fn*)) +(defn fetch-selected-text [v transactions] + (reduce (fn [text t] + (if (= "select.pointer" (str (.annotation t (.-userEvent Transaction) ))) + (conj text + (.sliceDoc + ^EditorState (.-state v) + (.-from (.-main (.-selection t))) + (.-to (.-main (.-selection t))))) + text)) + [] + transactions)) + (defn code-editor [content] (let [editor (atom nil) evaled-result (reagent/atom nil) update-timeout (reagent/atom nil) update-fn (.of (.-updateListener EditorView) - (fn [^ViewUpdate v] + (fn [^ViewUpdate view-update] (js/clearTimeout @update-timeout) (reset! update-timeout (js/setTimeout (fn [] - (reset! evaled-result (sci/eval-string* sci-ctx - (.toString (.-doc (.-state v))) #_content )) - (prn "updated delayed")) 2000)) - #_(when (.-docChanged v) - (prn v)))) + (let [selected-text (fetch-selected-text view-update (.-transactions view-update)) + eval-code (if (seq selected-text) + (first selected-text) + (.-doc (.-state view-update)))] + (reset! evaled-result (sci/eval-string* sci-ctx + (.toString eval-code) )) + (prn "updated delayed"))) 1000)))) start-state (.create EditorState (clj->js {:doc content