diff --git a/deps.edn b/deps.edn index a650266..61fe768 100644 --- a/deps.edn +++ b/deps.edn @@ -5,10 +5,14 @@ borkdude/sci {:git/url "https://github.com/borkdude/sci" :sha "a8505dd4ee0b5cc7e6f6215f1bbc136c6d4ae7ee"} reagent/reagent {:mvn/version "1.0.0"} + cljsjs/create-react-class {:mvn/version "15.6.3-1"} cljsjs/react {:mvn/version "17.0.2-0"} cljsjs/react-dom {:mvn/version "17.0.2-0"} cljsjs/react-dom-server {:mvn/version "17.0.2-0"} cljs-ajax/cljs-ajax {:mvn/version "0.8.3"} + ;;qlkit/qlkit {:mvn/version "0.5.0-SNAPSHOT"} + qlkit/qlkit {:local/root "../../klmplay/qlkit"} + sablono/sablono {:mvn/version "0.8.6"} } :aliases diff --git a/shadow-cljs.edn b/shadow-cljs.edn index 8d6757f..925f268 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -11,7 +11,9 @@ {:resolve {"react" {:target :global :global "React"} "react-dom" {:target :global - :global "ReactDOM"}}} + :global "ReactDOM"} + "create-react-class" {:target :global + :global "createReactClass"}}} :modules {:scittle {:entries [scittle.core]} :scittle.reagent {:entries [scittle.reagent] @@ -19,7 +21,9 @@ :scittle.ajax {:entries [scittle.ajax] :depends-on #{:scittle}} :scittle.makro-plugin {:entries [scittle.makro-plugin] - :depends-on #{:scittle}}} + :depends-on #{:scittle}} + :scittle.qlkit {:entries [scittle.qlkit] + :depends-on #{:scittle}}} :build-hooks [(shadow.cljs.build-report/hook)] :output-dir "resources/public/js" :devtools {:repl-pprint true}}}} diff --git a/src/scittle/makro_plugin.cljs b/src/scittle/makro_plugin.cljs index 3d52d02..86bbb3b 100644 --- a/src/scittle/makro_plugin.cljs +++ b/src/scittle/makro_plugin.cljs @@ -1,6 +1,6 @@ (ns scittle.makro-plugin (:require-macros [scittle.makros :refer - [add-slash-makro add-c-makro]]) + [add-slash-makro add-c-makro]]) (:require [sci.core :as sci] [scittle.core :as scittle] diff --git a/src/scittle/qlkit.cljs b/src/scittle/qlkit.cljs new file mode 100644 index 0000000..9bdf6bb --- /dev/null +++ b/src/scittle/qlkit.cljs @@ -0,0 +1,59 @@ +(ns scittle.qlkit + (:require [qlkit.core :as ql :refer-macros [defcomponent*]] + [sci.core :as sci] + [scittle.core :as scittle] + [sablono.core :as html :refer-macros [html html*]] + [sablono.interpreter :as si])) + +(def qns (sci/create-ns 'qlkit.core nil)) + +(defn ^:macro defcomponent-fn [_form _env comp-name [_ q] [_ [_ m _] [_ h]]] + `(defcomponent* ~comp-name + (query ~q) + (render [this ~m state] + (html ~h))) + + #_(defcomponent* comp-name (query q) (render r (html [:p "hu"]))) + + ) + +(defn ^:macro defcomponent+ [form env nam & bodies] + (apply ql/defcomponent+ form env nam bodies)) + +(defn random-uuid-fn [] + (random-uuid)) + +(def qlkit-namespace + {'add-class (sci/copy-var ql/add-class qns) + ;; 'defcomponent* (sci/copy-var defcomponent-fn qns) + 'defcomponent* (sci/copy-var defcomponent+ qns) + 'transact!* (sci/copy-var ql/transact!* qns) + 'update-state!* (sci/copy-var ql/update-state!* qns) + 'create-instance (sci/copy-var ql/create-instance qns) + 'get-query (sci/copy-var ql/get-query qns) + 'parse-children (sci/copy-var ql/parse-children qns) + 'parse-children-remote (sci/copy-var ql/parse-children-remote qns) + 'parse-children-sync (sci/copy-var ql/parse-children-sync qns) + 'mount (sci/copy-var ql/mount qns) + + 'classes (sci/copy-var ql/classes qns) + 'random-uuid (sci/copy-var random-uuid-fn qns)}) + +(def sns (sci/create-ns 'sablono.core nil)) + +(defn ^:macro html+ [form env html-form] + (html* [:p "in sablono"])) + +(def sablono-core-namespace + {'html (sci/copy-var html+ sns)}) + +(def sins (sci/create-ns 'sablono.interpreter nil)) + +(def sablono-interpreter-ns + {'interpret (sci/copy-var si/interpret sins)}) + +(scittle/register-plugin! + ::qlkit + {:namespaces {'qlkit.core qlkit-namespace + 'sablono.core sablono-core-namespace + 'sablono.interpreter sablono-interpreter-ns}})