From d38d593dad221024d4071b92a0f6351d6038908e Mon Sep 17 00:00:00 2001 From: Erik Post Date: Mon, 10 Feb 2020 15:25:12 +0100 Subject: [PATCH 1/7] studio: Parameterise initialState via Input. #344 --- studio/src/Main.purs | 14 ++++++++++++-- studio/src/View/Studio.purs | 16 ++++------------ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/studio/src/Main.purs b/studio/src/Main.purs index 20dd792a..21df4a59 100644 --- a/studio/src/Main.purs +++ b/studio/src/Main.purs @@ -11,14 +11,24 @@ import Routing.Hash as Routing import View.Studio as Studio import View.Studio (Query(LoadTransactionsThenView)) +import View.Studio.Model.Route (RouteF(Home)) import ExampleData as Ex main :: Effect Unit main = runHalogenAff do urlHash <- liftEffect Routing.getHash - liftEffect $ log $ "studio: transaction hash to be visited: " <> urlHash + liftEffect $ log $ "tx browser: transaction hash to be visited: " <> urlHash body <- awaitBody - io <- runUI Studio.ui unit body + io <- runUI Studio.ui initialState body _ <- io.query $ H.tell (LoadTransactionsThenView Ex.endpointUrl urlHash) pure io + where + initialState :: Studio.Input + initialState = + { msg: "Welcome to Statebox Studio!" + , projects: Ex.projects + , hashSpace: mempty + , apiUrl: Ex.endpointUrl + , route: Home + } diff --git a/studio/src/View/Studio.purs b/studio/src/View/Studio.purs index ac4e6137..da4e0900 100644 --- a/studio/src/View/Studio.purs +++ b/studio/src/View/Studio.purs @@ -35,28 +35,20 @@ import View.Studio.Model.Route as Route import View.Studio.Model.Route (Route, RouteF(..), NodeIdent(..)) import View.Studio.View (render, ChildSlots) -import ExampleData as Ex - -type Input = Unit +type Input = State data Query a = LoadTransactionsThenView URL TxId a ui :: ∀ m. MonadAff m => H.Component HTML Query Input Void m ui = H.mkComponent - { initialState: const initialState + { initialState: mkInitialState , eval: mkEval $ defaultEval { handleAction = handleAction, handleQuery = handleQuery } , render: render } where - initialState :: State - initialState = - { msg: "Welcome to Statebox Studio!" - , projects: Ex.projects - , hashSpace: AdjacencySpace.empty - , apiUrl: Ex.endpointUrl - , route: Home - } + mkInitialState :: Input -> State + mkInitialState input = input handleQuery :: ∀ a. Query a -> H.HalogenM State Action ChildSlots Void m (Maybe a) handleQuery = case _ of From 8052ec6ae444781d1e4c9d9efba8f6c5c6f05e79 Mon Sep 17 00:00:00 2001 From: Erik Post Date: Mon, 10 Feb 2020 22:01:14 +0100 Subject: [PATCH 2/7] studio: Parameterise app title via State. #344 --- .../src/Statebox/Browser/Main.purs | 35 +++++++++++++++++++ studio/src/Main.purs | 3 +- studio/src/View/Studio/Model.purs | 1 + studio/src/View/Studio/View.purs | 13 +++---- 4 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 halogen-tx-browser/src/Statebox/Browser/Main.purs diff --git a/halogen-tx-browser/src/Statebox/Browser/Main.purs b/halogen-tx-browser/src/Statebox/Browser/Main.purs new file mode 100644 index 00000000..9faaac84 --- /dev/null +++ b/halogen-tx-browser/src/Statebox/Browser/Main.purs @@ -0,0 +1,35 @@ +module Statebox.Browser.Main where + +import Prelude +import Effect (Effect) +import Effect.Class (liftEffect) +import Effect.Console (log) +import Halogen as H +import Halogen.Aff (awaitBody, runHalogenAff) +import Halogen.VDom.Driver (runUI) +import Routing.Hash as Routing + +import View.Studio as Studio +import View.Studio (Query(LoadTransactionsThenView)) +import View.Studio.Model.Route (RouteF(Home)) + +import ExampleData as Ex + +main :: Effect Unit +main = runHalogenAff do + urlHash <- liftEffect Routing.getHash + liftEffect $ log $ "tx browser: transaction hash to be visited: " <> urlHash + body <- awaitBody + io <- runUI Studio.ui initialState body + _ <- io.query $ H.tell (LoadTransactionsThenView Ex.endpointUrl urlHash) + pure io + where + initialState :: Studio.Input + initialState = + { title: "Statebox Transaction Browser" + , msg: "Welcome to the Statebox Transaction Browser!" + , projects: mempty + , hashSpace: mempty + , apiUrl: Ex.endpointUrl + , route: Home + } diff --git a/studio/src/Main.purs b/studio/src/Main.purs index 21df4a59..450e96c2 100644 --- a/studio/src/Main.purs +++ b/studio/src/Main.purs @@ -26,7 +26,8 @@ main = runHalogenAff do where initialState :: Studio.Input initialState = - { msg: "Welcome to Statebox Studio!" + { title: "Statebox Studio" + , msg: "Welcome to Statebox Studio!" , projects: Ex.projects , hashSpace: mempty , apiUrl: Ex.endpointUrl diff --git a/studio/src/View/Studio/Model.purs b/studio/src/View/Studio/Model.purs index 6c0e6750..111f910b 100644 --- a/studio/src/View/Studio/Model.purs +++ b/studio/src/View/Studio/Model.purs @@ -52,6 +52,7 @@ type State = { route :: Route , projects :: Array Project , hashSpace :: AdjacencySpace HashStr TxSum -- ^ Hashes and their (tree of) links. + , title :: String , msg :: String , apiUrl :: URL } diff --git a/studio/src/View/Studio/View.purs b/studio/src/View/Studio/View.purs index 1becd9c8..17ebde31 100644 --- a/studio/src/View/Studio/View.purs +++ b/studio/src/View/Studio/View.purs @@ -60,7 +60,7 @@ data VoidF a render :: ∀ m. MonadAff m => State -> ComponentHTML Action ChildSlots m render state = div [] - [ navBar + [ navBar state.title , div [ classes [ ClassName "flex" ] ] [ div [ classes [ ClassName "w-1/6", ClassName "h-12" ] ] [ slot _objectTree unit (TreeMenu.menuComponent (_ == state.route)) (stateMenu state) ((\(TreeMenu.Clicked menuNodeId route) -> ShowDiagramNodeContent route) >>> Just) ] @@ -141,13 +141,14 @@ routeBreadcrumbs route = where crumb str = li [] [ a [ href "#" ] [ text str ] ] -navBar :: ∀ m. ComponentHTML Action ChildSlots m -navBar = +navBar :: ∀ m. String -> ComponentHTML Action ChildSlots m +navBar title = nav [ classes $ ClassName <$> [ "css-navbar", "flex", "items-center", "justify-between", "flex-wrap", "bg-purple-darker", "p-6" ] ] - [ div [ classes $ ClassName <$> [ "flex", "items-center", "flex-no-shrink", "text-white", "mr-6" ] ] - [ span [ classes [ ClassName "css-logo-statebox" ] ] [] + [ div [ classes $ ClassName <$> [ "flex", "items-center", "flex-no-shrink", "text-white", "mr-6" ] ] + [ span [ classes [ ClassName "css-logo-statebox" ] ] + [] , span [ classes $ ClassName <$> [ "navbar-item", "ml-4", "font-semibold", "text-xl" ] ] - [ text "Statebox Studio" ] + [ text title ] ] , menu [ "Home" /\ Just Home , "Project" /\ Nothing From 1ccd517d1620e45819282e30bd5309f5ad86a453 Mon Sep 17 00:00:00 2001 From: Erik Post Date: Mon, 10 Feb 2020 23:03:27 +0100 Subject: [PATCH 3/7] tx-browser: Create Spago build. #344 --- halogen-tx-browser/spago.dhall | 9 +++++++++ packages.dhall | 1 + 2 files changed, 10 insertions(+) create mode 100644 halogen-tx-browser/spago.dhall diff --git a/halogen-tx-browser/spago.dhall b/halogen-tx-browser/spago.dhall new file mode 100644 index 00000000..d3b95bbf --- /dev/null +++ b/halogen-tx-browser/spago.dhall @@ -0,0 +1,9 @@ +{ name = + "stbx-tx-browser" +, sources = + [ "src/**/*.purs" ] +, dependencies = + [ "studio" ] +, packages = + ../packages.dhall +} diff --git a/packages.dhall b/packages.dhall index 3362de12..8092465d 100644 --- a/packages.dhall +++ b/packages.dhall @@ -10,6 +10,7 @@ let additions = , stbx-lang = ./stbx-lang/spago.dhall as Location , stbx-service-rest = ./stbx-service-rest/spago.dhall as Location , stbx-tx-store = ./stbx-tx-store/spago.dhall as Location + , studio = ./studio/spago.dhall as Location , studio-common = ./studio-common/spago.dhall as Location , vec = ./vec/spago.dhall as Location , halogen-diagram-editor = ./halogen-diagram-editor/spago.dhall as Location From 3db2449abee159ebfc06180ccdf5e99955129a54 Mon Sep 17 00:00:00 2001 From: Erik Post Date: Mon, 10 Feb 2020 23:07:31 +0100 Subject: [PATCH 4/7] tx-browser: Copy npm package.json and html files from studio. #344 --- halogen-tx-browser/html/index.css | 36 +++++++++++++++++++++++++++ halogen-tx-browser/html/index.html | 13 ++++++++++ halogen-tx-browser/html/index.js | 4 +++ halogen-tx-browser/html/studio.css | 6 +++++ halogen-tx-browser/package.json | 39 ++++++++++++++++++++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 halogen-tx-browser/html/index.css create mode 100644 halogen-tx-browser/html/index.html create mode 100644 halogen-tx-browser/html/index.js create mode 100644 halogen-tx-browser/html/studio.css create mode 100644 halogen-tx-browser/package.json diff --git a/halogen-tx-browser/html/index.css b/halogen-tx-browser/html/index.css new file mode 100644 index 00000000..9e2a1ffc --- /dev/null +++ b/halogen-tx-browser/html/index.css @@ -0,0 +1,36 @@ +@import "tailwindcss/dist/utilities.min.css"; +@import "tailwindcss/dist/preflight.min.css"; +@import "@fortawesome/fontawesome-free/css/all.min.css"; + +@import "./petrinet.css"; +@import "./diagram.css"; +@import "./typedefs.css"; +@import "./auths.css"; +@import "./kdmoncat-bricks.css"; +@import "../../halogen-grid-kit/src/GridKit/KeyHandler.css"; +@import "./studio.css"; + +svg { + display: block; + height: 100%; + width: 100%; + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; +} +a { + text-decoration: none; +} +.css-navbar .css-logo-statebox { + display: inline-block; + width: 32px; + height: 37px; + background-image: url(logo-statebox-white.svg); +} +.css-route-breadcrumbs li+li::before { + margin-left: 0.5em; + margin-right: 0.5em; + color: #b5b5b5; + content: "\02192"; +} diff --git a/halogen-tx-browser/html/index.html b/halogen-tx-browser/html/index.html new file mode 100644 index 00000000..92dfe97b --- /dev/null +++ b/halogen-tx-browser/html/index.html @@ -0,0 +1,13 @@ + + + + + Statebox Transaction Browser + + + + + + + + diff --git a/halogen-tx-browser/html/index.js b/halogen-tx-browser/html/index.js new file mode 100644 index 00000000..04735abd --- /dev/null +++ b/halogen-tx-browser/html/index.js @@ -0,0 +1,4 @@ +window.Stbx = require('@statebox/stbx-js') +window.dagre = require("dagre") +var Main = require("../output/index.js") +Main.main() diff --git a/halogen-tx-browser/html/studio.css b/halogen-tx-browser/html/studio.css new file mode 100644 index 00000000..89c1551a --- /dev/null +++ b/halogen-tx-browser/html/studio.css @@ -0,0 +1,6 @@ +tr.css-tx-execution { + background: orange; +} +tr.css-tx-current { + background: pink; +} diff --git a/halogen-tx-browser/package.json b/halogen-tx-browser/package.json new file mode 100644 index 00000000..b894ddd2 --- /dev/null +++ b/halogen-tx-browser/package.json @@ -0,0 +1,39 @@ +{ + "name": "stbx-tx-browser", + "version": "1.0.0", + "description": "Statebox Transaction Browser", + "main": "index.js", + "directories": { + "test": "test" + }, + "scripts": { + "postinstall": "spago install", + "start": "npm run build && concurrently --kill-others --handle-input npm:watch npm:serve", + "build": "spago bundle-module --main Statebox.Browser.Main --to output/index.js --purs-args --censor-codes=ImplicitImport,ImplicitQualifiedImport,HidingImport", + "watch": "spago bundle-module --main Statebox.Browser.Main --to output/index.js --watch --purs-args --censor-codes=ImplicitImport,ImplicitQualifiedImport,HidingImport", + "test": "spago test", + "docs": "spago docs", + "repl": "spago repl", + "serve": "parcel html/index.html", + "bundle": "npm run build && rm -rf dist && parcel build html/index.html --public-url . --no-source-maps" + }, + "keywords": [ + "statebox", + "petrinet" + ], + "author": "Erik Post ", + "license": "Commercial", + "devDependencies": { + "concurrently": "^5.0.2", + "parcel-bundler": "^1.12.4", + "purescript": "^0.13.5", + "purescript-psa": "^0.7.3", + "spago": "^0.13" + }, + "dependencies": { + "@fortawesome/fontawesome-free": "^5.6.3", + "@statebox/stbx-js": "0.0.31", + "dagre": "^0.8.4", + "tailwindcss": "^0.7.3" + } +} From 6933ff50e0f0b23bb6c7e6a4acde475fe06ed434 Mon Sep 17 00:00:00 2001 From: Erik Post Date: Mon, 10 Feb 2020 23:22:20 +0100 Subject: [PATCH 5/7] tx-browser: Adapt html and css from studio originals. #344 --- halogen-tx-browser/html/index.css | 14 +++++++------- .../html/{studio.css => tx-browser.css} | 0 2 files changed, 7 insertions(+), 7 deletions(-) rename halogen-tx-browser/html/{studio.css => tx-browser.css} (100%) diff --git a/halogen-tx-browser/html/index.css b/halogen-tx-browser/html/index.css index 9e2a1ffc..0f7bbcab 100644 --- a/halogen-tx-browser/html/index.css +++ b/halogen-tx-browser/html/index.css @@ -2,13 +2,13 @@ @import "tailwindcss/dist/preflight.min.css"; @import "@fortawesome/fontawesome-free/css/all.min.css"; -@import "./petrinet.css"; -@import "./diagram.css"; -@import "./typedefs.css"; -@import "./auths.css"; -@import "./kdmoncat-bricks.css"; +@import "../../studio/html/petrinet.css"; +@import "../../studio/html/diagram.css"; +@import "../../studio/html/typedefs.css"; +@import "../../studio/html/auths.css"; +@import "../../studio/html/kdmoncat-bricks.css"; @import "../../halogen-grid-kit/src/GridKit/KeyHandler.css"; -@import "./studio.css"; +@import "./tx-browser.css"; svg { display: block; @@ -26,7 +26,7 @@ a { display: inline-block; width: 32px; height: 37px; - background-image: url(logo-statebox-white.svg); + background-image: url(../../studio/html/logo-statebox-white.svg); } .css-route-breadcrumbs li+li::before { margin-left: 0.5em; diff --git a/halogen-tx-browser/html/studio.css b/halogen-tx-browser/html/tx-browser.css similarity index 100% rename from halogen-tx-browser/html/studio.css rename to halogen-tx-browser/html/tx-browser.css From 100cf1a2c41ca01390fb06863b4a930706253375 Mon Sep 17 00:00:00 2001 From: Erik Post Date: Mon, 10 Feb 2020 23:28:20 +0100 Subject: [PATCH 6/7] tx-browser: Fix an overzealous replacement of 'studio' by 'tx-browser'. #344 --- studio/src/Main.purs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/src/Main.purs b/studio/src/Main.purs index 450e96c2..a1875614 100644 --- a/studio/src/Main.purs +++ b/studio/src/Main.purs @@ -18,7 +18,7 @@ import ExampleData as Ex main :: Effect Unit main = runHalogenAff do urlHash <- liftEffect Routing.getHash - liftEffect $ log $ "tx browser: transaction hash to be visited: " <> urlHash + liftEffect $ log $ "studio: transaction hash to be visited: " <> urlHash body <- awaitBody io <- runUI Studio.ui initialState body _ <- io.query $ H.tell (LoadTransactionsThenView Ex.endpointUrl urlHash) From d72f9d8dc29c31bcb4e80ba66551bcebf35f16d0 Mon Sep 17 00:00:00 2001 From: Erik Post Date: Mon, 10 Feb 2020 23:32:27 +0100 Subject: [PATCH 7/7] tx-browser: Rename project dir from 'halogen-tx-browser' to 'tx-browser'. #344 --- {halogen-tx-browser => tx-browser}/html/index.css | 0 {halogen-tx-browser => tx-browser}/html/index.html | 0 {halogen-tx-browser => tx-browser}/html/index.js | 0 {halogen-tx-browser => tx-browser}/html/tx-browser.css | 0 {halogen-tx-browser => tx-browser}/package.json | 0 {halogen-tx-browser => tx-browser}/spago.dhall | 0 {halogen-tx-browser => tx-browser}/src/Statebox/Browser/Main.purs | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename {halogen-tx-browser => tx-browser}/html/index.css (100%) rename {halogen-tx-browser => tx-browser}/html/index.html (100%) rename {halogen-tx-browser => tx-browser}/html/index.js (100%) rename {halogen-tx-browser => tx-browser}/html/tx-browser.css (100%) rename {halogen-tx-browser => tx-browser}/package.json (100%) rename {halogen-tx-browser => tx-browser}/spago.dhall (100%) rename {halogen-tx-browser => tx-browser}/src/Statebox/Browser/Main.purs (100%) diff --git a/halogen-tx-browser/html/index.css b/tx-browser/html/index.css similarity index 100% rename from halogen-tx-browser/html/index.css rename to tx-browser/html/index.css diff --git a/halogen-tx-browser/html/index.html b/tx-browser/html/index.html similarity index 100% rename from halogen-tx-browser/html/index.html rename to tx-browser/html/index.html diff --git a/halogen-tx-browser/html/index.js b/tx-browser/html/index.js similarity index 100% rename from halogen-tx-browser/html/index.js rename to tx-browser/html/index.js diff --git a/halogen-tx-browser/html/tx-browser.css b/tx-browser/html/tx-browser.css similarity index 100% rename from halogen-tx-browser/html/tx-browser.css rename to tx-browser/html/tx-browser.css diff --git a/halogen-tx-browser/package.json b/tx-browser/package.json similarity index 100% rename from halogen-tx-browser/package.json rename to tx-browser/package.json diff --git a/halogen-tx-browser/spago.dhall b/tx-browser/spago.dhall similarity index 100% rename from halogen-tx-browser/spago.dhall rename to tx-browser/spago.dhall diff --git a/halogen-tx-browser/src/Statebox/Browser/Main.purs b/tx-browser/src/Statebox/Browser/Main.purs similarity index 100% rename from halogen-tx-browser/src/Statebox/Browser/Main.purs rename to tx-browser/src/Statebox/Browser/Main.purs