mirror of https://github.com/status-im/pluto.git
Introduced separate pluto-web project
This commit is contained in:
parent
6b89dbced6
commit
28cdda47b2
|
@ -0,0 +1,8 @@
|
|||
.PHONY = tests
|
||||
|
||||
dev:
|
||||
clojure -A:examples
|
||||
|
||||
tests:
|
||||
clojure -A:test-clj
|
||||
clojure -A:test-cljs
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
Development requires [Deps and CLI](https://clojure.org/guides/getting_started) tooling installed.
|
||||
|
||||
Run figwheel using `clojure -A:figwheel`.
|
||||
Run dev mode using `make dev`.
|
||||
|
||||
### Tests
|
||||
|
||||
|
|
11
deps.edn
11
deps.edn
|
@ -1,15 +1,14 @@
|
|||
{:deps {org.clojure/clojure {:mvn/version "1.9.0"}
|
||||
{:deps {org.clojure/clojure {:mvn/version "1.10.0"}
|
||||
org.clojure/clojurescript {:mvn/version "1.10.439"}
|
||||
org.clojure/tools.reader {:mvn/version "1.3.0"}
|
||||
org.clojure/tools.reader {:mvn/version "1.3.2"}
|
||||
reagent {:mvn/version "0.8.1"}
|
||||
re-frame {:mvn/version "0.10.6"}}
|
||||
:paths ["src"]
|
||||
:aliases {:examples {:extra-paths ["examples/src"]}
|
||||
:figwheel {:extra-paths ["target" "test" "examples/src" "figwheel/resources" "figwheel/src"]
|
||||
:extra-deps {com.bhauman/figwheel-main {:mvn/version "0.1.9"}
|
||||
:aliases {:examples {:extra-paths ["pluto-web/src" "target" "test" "examples/src" "examples/resources"]
|
||||
:extra-deps {com.bhauman/figwheel-main {:mvn/version "0.2.0"}
|
||||
com.bhauman/rebel-readline-cljs {:mvn/version "0.1.4"}
|
||||
binaryage/devtools {:mvn/version "0.9.10"}}
|
||||
:main-opts ["-m" "figwheel.main" "-b" "figwheel/dev" "-r"]}
|
||||
:main-opts ["-m" "figwheel.main" "-b" "examples/dev" "-r"]}
|
||||
:test-clj {:extra-paths ["test"]
|
||||
:extra-deps {eftest {:mvn/version "0.5.2"}}
|
||||
:main-opts ["-e" "(require,'[eftest.runner,:refer,[find-tests,run-tests]]),(run-tests,(find-tests,\"test\"))"]}
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
^{:watch-dirs ["src" "pluto-web/src" "examples/src"]
|
||||
:log-file "figwheel-main.log"
|
||||
:log-level :info}
|
||||
{:main pluto.figwheel}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
(ns pluto.examples
|
||||
(:require [clojure.string :as string]
|
||||
[pluto.components.html :as html]
|
||||
[pluto.js :as js]
|
||||
(:require [pluto.web.components :as components]
|
||||
pluto.web.events
|
||||
pluto.web.queries
|
||||
[pluto.reader :as reader]
|
||||
[pluto.reader.hooks :as hooks]
|
||||
[pluto.storages :as storages]
|
||||
|
@ -18,38 +18,6 @@
|
|||
(= "re-frame: overwriting" (first args)) nil
|
||||
:else (apply warn args)))})
|
||||
|
||||
(defonce do-timer (js/setInterval #(re-frame/dispatch [:random (zero? (rand-int 2))]) 1000))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
:random
|
||||
(fn [db [_ b]]
|
||||
(assoc db :random {:cond? b})))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::alert
|
||||
(fn [value] (js/alert value)))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
:alert
|
||||
(fn [cofx [_ env {:keys [value]}]]
|
||||
{::alert (str "id = " (:id env) " value = " value)}))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::identity
|
||||
(fn [{:keys [cb]}] (re-frame/dispatch (cb {:value "Yeahhh"}))))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
:identity
|
||||
(fn [cofx [_ env m]]
|
||||
{::identity m}))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:random-boolean
|
||||
:random)
|
||||
|
||||
(re-frame/reg-sub :extensions/identity
|
||||
(fn [_ [_ _ {:keys [value]}]] value))
|
||||
|
||||
(defn render [h el]
|
||||
(reagent/render (h {:name "Test Extension"
|
||||
:users [{:nm "Jane"}
|
||||
|
@ -71,7 +39,7 @@
|
|||
|
||||
(defn parse [m]
|
||||
(reader/parse {:env {:id "Extension ID"}
|
||||
:capacities {:components html/components
|
||||
:capacities {:components components/all
|
||||
:queries {'random-boolean
|
||||
{:value :random-boolean}
|
||||
'identity
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
^{:watch-dirs ["src" "figwheel/src" "examples/src"]
|
||||
;:auto-testing true
|
||||
:log-file "figwheel-main.log"
|
||||
:log-level :info}
|
||||
{:main pluto.figwheel}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
{:deps {org.clojure/clojure {:mvn/version "1.10.0"}
|
||||
org.clojure/clojurescript {:mvn/version "1.10.439"}
|
||||
reagent {:mvn/version "0.8.1"}
|
||||
re-frame {:mvn/version "0.10.6"}}
|
||||
:paths ["src"]}
|
|
@ -0,0 +1,9 @@
|
|||
(defproject status-im/pluto-web "0.1.0"
|
||||
:dependencies [[org.clojure/clojure "1.9.0"]
|
||||
[org.clojure/clojurescript "1.10.439"]
|
||||
[org.clojure/tools.reader "1.2.1"]
|
||||
[reagent "0.8.0"]
|
||||
[re-frame "0.10.5"]
|
||||
[binaryage/devtools "0.9.10"]
|
||||
[day8.re-frame/re-frame-10x "0.3.2"]]
|
||||
:source-paths ["src"])
|
|
@ -0,0 +1,22 @@
|
|||
(ns pluto.web.components
|
||||
(:require [re-frame.core :as re-frame]))
|
||||
|
||||
(defn view [props & content]
|
||||
(into [:div props] content))
|
||||
|
||||
(defn button [{:keys [on-click]} & content]
|
||||
(into [:button {:on-click #(re-frame/dispatch (on-click {}))}] content))
|
||||
|
||||
(defn text [props & content]
|
||||
(into [:span props] content))
|
||||
|
||||
(def all {'view {:properties {}
|
||||
:value view
|
||||
:description ""
|
||||
:examples []}
|
||||
'button {:properties {:on-click :event}
|
||||
:value button
|
||||
:examples []}
|
||||
'text {:properties {}
|
||||
:value text
|
||||
:examples []}})
|
|
@ -0,0 +1,72 @@
|
|||
(ns pluto.web.core
|
||||
(:require [reagent.core :as reagent]
|
||||
[pluto.reader :as reader]
|
||||
[pluto.reader.hooks :as hooks]
|
||||
pluto.reader.views
|
||||
[pluto.web.components :as components]
|
||||
pluto.web.events
|
||||
pluto.web.queries))
|
||||
|
||||
(defn render [h el]
|
||||
(reagent/render (h {:name "Test Extension"
|
||||
:users [{:nm "Jane"}
|
||||
{:nm "Sue"}]}) el))
|
||||
|
||||
(defn errors-list [v]
|
||||
(fn []
|
||||
[:div
|
||||
[:div "Errors"]
|
||||
(into [:ul]
|
||||
(for [{:keys [type] :as m} v]
|
||||
[:li
|
||||
[:span [:b (str type)] (pr-str (dissoc m :type))]]))]))
|
||||
|
||||
(def hook
|
||||
(reify hooks/Hook
|
||||
(hook-in [_ id env {:keys [description scope parameters preview short-preview]} cofx])
|
||||
(unhook [_ id env {:keys [scope]} {:keys [db] :as cofx}])))
|
||||
|
||||
(defn parse [m]
|
||||
(reader/parse {:env {:id "Extension ID"}
|
||||
:capacities {:components
|
||||
{'view {:properties {}
|
||||
:value components/view
|
||||
:description ""
|
||||
:examples []}
|
||||
'button {:properties {:on-click :event}
|
||||
:value components/button
|
||||
:examples []}
|
||||
'text {:properties {}
|
||||
:value components/text
|
||||
:examples []}}
|
||||
:queries {'random-boolean
|
||||
{:value :random-boolean}
|
||||
'identity
|
||||
{:value :extensions/identity :arguments {:value :map}}}
|
||||
:hooks {:main
|
||||
{:hook hook
|
||||
:properties {:view :view}}}
|
||||
:events {'identity
|
||||
{:permissions [:read]
|
||||
:value :identity
|
||||
:arguments {:cb :event}}
|
||||
'alert
|
||||
{:permissions [:read]
|
||||
:value :alert
|
||||
:arguments {:value :string}}}}}
|
||||
m))
|
||||
|
||||
(defn render-extension [m el el-errors]
|
||||
(let [{:keys [data errors]} (parse m)]
|
||||
(when errors
|
||||
(render (errors-list errors) el-errors))
|
||||
(render (get-in data [:hooks :main :demo :parsed :view]) el)))
|
||||
|
||||
(defn read-extension [o el el-errors]
|
||||
(let [{:keys [data errors]} (reader/read (:content o))]
|
||||
(render-extension data el el-errors)))
|
||||
|
||||
(defn render-result [{:keys [type value]} el el-errors]
|
||||
(case type
|
||||
:error (set! (.-innerHTML el-errors) value)
|
||||
(read-extension value el el-errors)))
|
|
@ -0,0 +1,18 @@
|
|||
(ns pluto.web.dev
|
||||
(:require [reagent.dom :as dom]
|
||||
[re-frame.loggers :as loggers]
|
||||
[pluto.storages :as storages]))
|
||||
|
||||
(def warn (js/console.warn.bind js/console))
|
||||
(loggers/set-loggers!
|
||||
{:warn (fn [& args]
|
||||
(cond
|
||||
(= "re-frame: overwriting" (first args)) nil
|
||||
:else (apply warn args)))})
|
||||
|
||||
#_
|
||||
(defn ^:export load-and-render
|
||||
[s el el-errors]
|
||||
(dom/unmount-component-at-node el)
|
||||
(dom/unmount-component-at-node el-errors)
|
||||
(storages/fetch s #(render-result % el el-errors)))
|
|
@ -0,0 +1,20 @@
|
|||
(ns pluto.web.events
|
||||
(:require [re-frame.core :as re-frame]))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::alert
|
||||
(fn [value] (js/alert value)))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
:alert
|
||||
(fn [_ [_ env {:keys [value]}]]
|
||||
{::alert (str "id = " (:id env) " value = " value)}))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::identity
|
||||
(fn [{:keys [cb]}] (re-frame/dispatch (cb {}))))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
:identity
|
||||
(fn [_ [_ _ m]]
|
||||
{::identity m}))
|
|
@ -0,0 +1,16 @@
|
|||
(ns pluto.web.queries
|
||||
(:require [re-frame.core :as re-frame]))
|
||||
|
||||
(defonce do-timer (js/setInterval #(re-frame/dispatch [:random (zero? (rand-int 2))]) 1000))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
:random
|
||||
(fn [db [_ b]]
|
||||
(assoc db :random {:cond? b})))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:random-boolean
|
||||
:random)
|
||||
|
||||
(re-frame/reg-sub :extensions/identity
|
||||
(fn [_ [_ _ {:keys [value]}]] value))
|
19
project.clj
19
project.clj
|
@ -1,24 +1,9 @@
|
|||
(defproject status-im/pluto "iteration-4-7-SNAPSHOT"
|
||||
:dependencies [[org.clojure/clojure "1.9.0"]
|
||||
[org.clojure/clojurescript "1.10.238"]
|
||||
[org.clojure/clojurescript "1.10.439"]
|
||||
[org.clojure/tools.reader "1.2.1"]
|
||||
[reagent "0.8.0"]
|
||||
[re-frame "0.10.5"]
|
||||
[binaryage/devtools "0.9.10"]
|
||||
[day8.re-frame/re-frame-10x "0.3.2"]]
|
||||
|
||||
:plugins [[lein-cljsbuild "1.1.7"]
|
||||
[lein-doo "0.1.10"]]
|
||||
|
||||
:source-paths ["src"]
|
||||
|
||||
:deploy-repositories [["releases" :clojars]
|
||||
["snapshots" :clojars]]
|
||||
:cljsbuild {:builds [{:id "tests"
|
||||
:source-paths ["src" "test"]
|
||||
:compiler {:output-to "target/testable.js"
|
||||
:optimizations :none
|
||||
:cache-analysis false
|
||||
:target :nodejs
|
||||
:main "pluto.demo"
|
||||
:pretty-print true}}]})
|
||||
:source-paths ["src"])
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
(ns pluto.components.html
|
||||
(:require [re-frame.core :as re-frame]))
|
||||
|
||||
(defn view [props & content]
|
||||
;;(println "VVVVV" content)
|
||||
(into [:div props] content))
|
||||
|
||||
(defn button [{:keys [on-click]} & content]
|
||||
(into [:button {:on-click #(re-frame/dispatch (on-click {:value "ON CLICK"}))}] content))
|
||||
|
||||
(defn text [props & content]
|
||||
(into [:span props] content))
|
||||
|
||||
(def components {'view {:properties {}
|
||||
:value view
|
||||
:description ""
|
||||
:examples []}
|
||||
'button {:properties {:on-click :event}
|
||||
:value button
|
||||
:examples []}
|
||||
'text {:properties {}
|
||||
:value text
|
||||
:examples []}})
|
Loading…
Reference in New Issue