From 56279a61380d9a0ab3fe4dad2cb56352f47c8243 Mon Sep 17 00:00:00 2001 From: Miles Frain Date: Fri, 29 May 2020 17:34:22 -0600 Subject: [PATCH 1/2] Add examples and fix "browse" behavior in guide --- GUIDE.md | 28 ++++++++---- examples/halogen-render-hash-route/.gitignore | 14 ++++++ examples/halogen-render-hash-route/README.md | 12 +++++ .../halogen-render-hash-route/dev/index.html | 13 ++++++ .../halogen-render-hash-route/dev/index.js | 1 + .../halogen-render-hash-route/package.json | 14 ++++++ .../halogen-render-hash-route/packages.dhall | 8 ++++ .../halogen-render-hash-route/spago.dhall | 10 +++++ .../src/Example.purs | 45 +++++++++++++++++++ .../halogen-render-hash-route/src/Main.purs | 25 +++++++++++ .../src/Routing.purs | 31 +++++++++++++ examples/log-hash-route/.gitignore | 14 ++++++ examples/log-hash-route/README.md | 10 +++++ examples/log-hash-route/dev/index.html | 17 +++++++ examples/log-hash-route/dev/index.js | 1 + examples/log-hash-route/package.json | 14 ++++++ examples/log-hash-route/packages.dhall | 8 ++++ examples/log-hash-route/spago.dhall | 10 +++++ examples/log-hash-route/src/Main.purs | 8 ++++ examples/log-hash-route/src/Routing.purs | 39 ++++++++++++++++ 20 files changed, 314 insertions(+), 8 deletions(-) create mode 100644 examples/halogen-render-hash-route/.gitignore create mode 100644 examples/halogen-render-hash-route/README.md create mode 100644 examples/halogen-render-hash-route/dev/index.html create mode 100644 examples/halogen-render-hash-route/dev/index.js create mode 100644 examples/halogen-render-hash-route/package.json create mode 100644 examples/halogen-render-hash-route/packages.dhall create mode 100644 examples/halogen-render-hash-route/spago.dhall create mode 100644 examples/halogen-render-hash-route/src/Example.purs create mode 100644 examples/halogen-render-hash-route/src/Main.purs create mode 100644 examples/halogen-render-hash-route/src/Routing.purs create mode 100644 examples/log-hash-route/.gitignore create mode 100644 examples/log-hash-route/README.md create mode 100644 examples/log-hash-route/dev/index.html create mode 100644 examples/log-hash-route/dev/index.js create mode 100644 examples/log-hash-route/package.json create mode 100644 examples/log-hash-route/packages.dhall create mode 100644 examples/log-hash-route/spago.dhall create mode 100644 examples/log-hash-route/src/Main.purs create mode 100644 examples/log-hash-route/src/Routing.purs diff --git a/GUIDE.md b/GUIDE.md index aa4f1fd..688a536 100644 --- a/GUIDE.md +++ b/GUIDE.md @@ -5,6 +5,12 @@ * An `Applicative` parsing framework for paths (`Routing.Match`) * Routing effects and events (`Routing.Hash` or `Routing.PushState`) +# Quick examples + +If you prefer to learn from a small working example that contains the end-result of material in this guide, you may `cd` to any of the directories in `examples` and follow their `README.md` instructions. Current examples include: +* `log-hash-route` - Hash-based routing that logs routes to console. +* `halogen-render-hash-route` - Hash-based routing that renders routes to page with Halogen. + ## Parsing routes with `Routing.Match` In many routing frameworks, you might start by using a stringly-typed DSL for @@ -38,7 +44,7 @@ data MyRoute = PostIndex | Post PostId | PostEdit PostId - | PostBrowse String String + | PostBrowse Int String ``` By using a data type, we can use `case` analysis to guarantee that we've @@ -111,7 +117,7 @@ And now finally, we need to extract multiple segments for `PostBrowse`. ```purescript postBrowse :: Match MyRoute postBrowse = - PostBrowse <$> (lit "posts" *> str) <*> str + PostBrowse <$> (lit "posts" *> lit "browse" *> int) <*> str ``` The `<*>` combinator has arrows on both sides because we want both values. @@ -150,7 +156,7 @@ myRoute = oneOf [ PostIndex <$ lit "posts" , Post <$> (lit "posts" *> int) , PostEdit <$> (lit "posts" *> int) <* lit "edit" - , PostBrowse <$> (lit "posts" *> str) <*> str + , PostBrowse <$> (lit "posts" *> lit "browse" *> int) <*> str ] ``` @@ -166,7 +172,7 @@ myRoute = [ pure PostIndex , Post <$> int , PostEdit <$> int <* lit "edit" - , PostBrowse <$> str <*> str + , PostBrowse <$> (lit "browse" *> int) <*> str ] ``` @@ -185,7 +191,7 @@ myRoute = [ PostIndex <$ end , Post <$> int <* end , PostEdit <$> int <* lit "edit" <* end - , PostBrowse <$> str <*> str <* end + , PostBrowse <$> (lit "browse" *> int) <*> str <* end ] ``` @@ -199,7 +205,7 @@ myRoute = lit "posts" *> oneOf [ PostEdit <$> int <* lit "edit" , Post <$> int - , PostBrowse <$> str <*> str + , PostBrowse <$> (lit "browse" *> int) <*> str , pure PostIndex ] <* end ``` @@ -217,7 +223,7 @@ myRoute = root *> lit "posts" *> oneOf [ PostEdit <$> int <* lit "edit" , Post <$> int - , PostBrowse <$> str <*> str + , PostBrowse <$> (lit "browse" *> int) <*> str , pure PostIndex ] <* end ``` @@ -234,6 +240,7 @@ matchMyRoute = match myRoute test1 = matchMyRoute "/posts" test2 = matchMyRoute "/posts/12" test3 = matchMyRoute "/posts/12/edit" +test3 = matchMyRoute "/posts/browse/2004/June" test4 = matchMyRoute "/psots/bad" ``` @@ -241,7 +248,9 @@ test4 = matchMyRoute "/psots/bad" Now that we have a parser, we'll want to respond to events and fire a callback like in our original example. `purescript-routing` supports -hash-based routing via `Routing.Hash`. +hash-based routing via `Routing.Hash`. Hash-based routing uses anchors +(`#` or "hash" character) to specify the routes. +For example: `www.example.com/#posts/12/edit`. ```purescript import Routing.Hash (matches) @@ -285,6 +294,9 @@ Alternatively, we could explicitly add a `NotFound` constructor to `MyRoute`. ## Routing events with `Routing.PushState` +PushState-based routing *avoids* the use of anchors (`#`) to specify the routes. +For example: `www.example.com/posts/12/edit`. + Routing with `Routing.PushState` is similar to hash-based routing except that we must first create an interface. Browsers don't handle location events directly, so the interface needs to do some bookkeeping of it's own for diff --git a/examples/halogen-render-hash-route/.gitignore b/examples/halogen-render-hash-route/.gitignore new file mode 100644 index 0000000..2e01a20 --- /dev/null +++ b/examples/halogen-render-hash-route/.gitignore @@ -0,0 +1,14 @@ +/bower_components/ +/node_modules/ +/.pulp-cache/ +/output/ +/generated-docs/ +/.psc-package/ +/.psc* +/.purs* +/.psa* +/.spago +/.cache/ +/dist/ +/dev-dist/ +/prod/* diff --git a/examples/halogen-render-hash-route/README.md b/examples/halogen-render-hash-route/README.md new file mode 100644 index 0000000..f6e800d --- /dev/null +++ b/examples/halogen-render-hash-route/README.md @@ -0,0 +1,12 @@ +### Quick Start +``` +npm run build +npm run serve +``` + +When you click on the links, you should see: +* The anchor in the URL change +* The current route rendered on the page +* Route changes logged to the dev console + +You may also edit the URL directly instead of clicking on the links. diff --git a/examples/halogen-render-hash-route/dev/index.html b/examples/halogen-render-hash-route/dev/index.html new file mode 100644 index 0000000..48f4021 --- /dev/null +++ b/examples/halogen-render-hash-route/dev/index.html @@ -0,0 +1,13 @@ + + + + + + Render routes + + + + + + + \ No newline at end of file diff --git a/examples/halogen-render-hash-route/dev/index.js b/examples/halogen-render-hash-route/dev/index.js new file mode 100644 index 0000000..db8b552 --- /dev/null +++ b/examples/halogen-render-hash-route/dev/index.js @@ -0,0 +1 @@ +require("../output/Main/index.js").main(); diff --git a/examples/halogen-render-hash-route/package.json b/examples/halogen-render-hash-route/package.json new file mode 100644 index 0000000..b7ef29e --- /dev/null +++ b/examples/halogen-render-hash-route/package.json @@ -0,0 +1,14 @@ +{ + "license": "MIT", + "devDependencies": { + "parcel": "^1.12.4", + "purescript": "^0.13.8", + "spago": "^0.15.2" + }, + "scripts": { + "build": "spago build", + "serve": "parcel dev/index.html --out-dir dev-dist --open", + "prep-prod": "cp dev/index.html prod && rm -rf dist", + "build-prod": "npm run prep-prod && spago bundle-app --to prod/index.js && parcel build prod/index.html" + } +} diff --git a/examples/halogen-render-hash-route/packages.dhall b/examples/halogen-render-hash-route/packages.dhall new file mode 100644 index 0000000..dbe04f4 --- /dev/null +++ b/examples/halogen-render-hash-route/packages.dhall @@ -0,0 +1,8 @@ +let upstream = + https://github.com/purescript/package-sets/releases/download/psc-0.13.6-20200127/packages.dhall sha256:06a623f48c49ea1c7675fdf47f81ddb02ae274558e29f511efae1df99ea92fb8 + +let overrides = {=} + +let additions = {=} + +in upstream // overrides // additions diff --git a/examples/halogen-render-hash-route/spago.dhall b/examples/halogen-render-hash-route/spago.dhall new file mode 100644 index 0000000..f92131e --- /dev/null +++ b/examples/halogen-render-hash-route/spago.dhall @@ -0,0 +1,10 @@ +{- +Welcome to a Spago project! +You can edit this file as you like. +-} +{ name = "my-project" +, dependencies = + [ "console", "effect", "generics-rep", "halogen", "psci-support", "routing" ] +, packages = ./packages.dhall +, sources = [ "src/**/*.purs" ] +} diff --git a/examples/halogen-render-hash-route/src/Example.purs b/examples/halogen-render-hash-route/src/Example.purs new file mode 100644 index 0000000..2df9a02 --- /dev/null +++ b/examples/halogen-render-hash-route/src/Example.purs @@ -0,0 +1,45 @@ +module Example where + +import Prelude +import Data.Maybe (Maybe(..)) +import Halogen as H +import Halogen.HTML as HH +import Halogen.HTML.Properties as HP +import MyRouting (MyRoute) + +type State + = Maybe MyRoute + +-- Query must be (Type -> Type) +data Query a + = Nav MyRoute a + +component :: forall i o m. H.Component HH.HTML Query i o m +component = + H.mkComponent + { initialState: const Nothing + , render + , eval: + H.mkEval + $ H.defaultEval + { handleQuery = handleQuery + } + } + +render :: forall a m. State -> H.ComponentHTML a () m +render state = + let + renderLink link txt = HH.div_ [ HH.a [ HP.href link ] [ HH.text txt ] ] + in + HH.div_ + [ HH.text $ show state + , renderLink "#posts/" "Index" + , renderLink "#posts/8" "View post 8" + , renderLink "#posts/8/edit" "Edit post 8" + , renderLink "#posts/browse/2004/June" "Browse 2004 June" + ] + +handleQuery ∷ forall a ac o m. Query a → H.HalogenM State ac () o m (Maybe a) +handleQuery (Nav route a) = do + H.put $ Just route + pure (Just a) diff --git a/examples/halogen-render-hash-route/src/Main.purs b/examples/halogen-render-hash-route/src/Main.purs new file mode 100644 index 0000000..a765e87 --- /dev/null +++ b/examples/halogen-render-hash-route/src/Main.purs @@ -0,0 +1,25 @@ +module Main where + +import Prelude +import Data.Maybe (Maybe(..)) +import Effect (Effect) +import Effect.Aff (launchAff_) +import Effect.Class (liftEffect) +import Effect.Class.Console (log) +import Example (Query(..)) +import Example as Example +import Halogen as H +import Halogen.Aff as HA +import Halogen.VDom.Driver (runUI) +import MyRouting (myRoute) +import Routing.Hash (matches) + +main :: Effect Unit +main = + HA.runHalogenAff do + body <- HA.awaitBody + halogenIO <- runUI Example.component Nothing body + void $ liftEffect + $ matches myRoute \oldRoute newRoute -> do + log $ show oldRoute <> " -> " <> show newRoute + launchAff_ $ halogenIO.query $ H.tell $ Nav newRoute diff --git a/examples/halogen-render-hash-route/src/Routing.purs b/examples/halogen-render-hash-route/src/Routing.purs new file mode 100644 index 0000000..f2ac3fa --- /dev/null +++ b/examples/halogen-render-hash-route/src/Routing.purs @@ -0,0 +1,31 @@ +module MyRouting where + +import Prelude +import Data.Foldable (oneOf) +import Data.Generic.Rep (class Generic) +import Data.Generic.Rep.Show (genericShow) +import Routing.Match (Match, int, lit, str) + +type PostId + = Int + +data MyRoute + = PostIndex + | Post PostId + | PostEdit PostId + | PostBrowse Int String + +derive instance genericMyRoute :: Generic MyRoute _ + +instance showMyRoute :: Show MyRoute where + show = genericShow + +myRoute :: Match MyRoute +myRoute = + lit "posts" + *> oneOf + [ PostEdit <$> int <* lit "edit" + , Post <$> int + , PostBrowse <$> (lit "browse" *> int) <*> str + , pure PostIndex -- Unmatched goes to index too + ] diff --git a/examples/log-hash-route/.gitignore b/examples/log-hash-route/.gitignore new file mode 100644 index 0000000..2e01a20 --- /dev/null +++ b/examples/log-hash-route/.gitignore @@ -0,0 +1,14 @@ +/bower_components/ +/node_modules/ +/.pulp-cache/ +/output/ +/generated-docs/ +/.psc-package/ +/.psc* +/.purs* +/.psa* +/.spago +/.cache/ +/dist/ +/dev-dist/ +/prod/* diff --git a/examples/log-hash-route/README.md b/examples/log-hash-route/README.md new file mode 100644 index 0000000..9e1d236 --- /dev/null +++ b/examples/log-hash-route/README.md @@ -0,0 +1,10 @@ +### Quick Start +``` +npm run build +npm run serve +``` + +Then open up the browser console, and click on the links. +You should see the anchor in the URL change, and the route changes logged in the console. + +You may also edit the URL directly instead of clicking on the links. diff --git a/examples/log-hash-route/dev/index.html b/examples/log-hash-route/dev/index.html new file mode 100644 index 0000000..62d37cb --- /dev/null +++ b/examples/log-hash-route/dev/index.html @@ -0,0 +1,17 @@ + + + + + + Log routes + + + +
Index
+
View post 8
+
Edit post 8
+
Browse 2004 June
+ + + + \ No newline at end of file diff --git a/examples/log-hash-route/dev/index.js b/examples/log-hash-route/dev/index.js new file mode 100644 index 0000000..db8b552 --- /dev/null +++ b/examples/log-hash-route/dev/index.js @@ -0,0 +1 @@ +require("../output/Main/index.js").main(); diff --git a/examples/log-hash-route/package.json b/examples/log-hash-route/package.json new file mode 100644 index 0000000..b7ef29e --- /dev/null +++ b/examples/log-hash-route/package.json @@ -0,0 +1,14 @@ +{ + "license": "MIT", + "devDependencies": { + "parcel": "^1.12.4", + "purescript": "^0.13.8", + "spago": "^0.15.2" + }, + "scripts": { + "build": "spago build", + "serve": "parcel dev/index.html --out-dir dev-dist --open", + "prep-prod": "cp dev/index.html prod && rm -rf dist", + "build-prod": "npm run prep-prod && spago bundle-app --to prod/index.js && parcel build prod/index.html" + } +} diff --git a/examples/log-hash-route/packages.dhall b/examples/log-hash-route/packages.dhall new file mode 100644 index 0000000..dbe04f4 --- /dev/null +++ b/examples/log-hash-route/packages.dhall @@ -0,0 +1,8 @@ +let upstream = + https://github.com/purescript/package-sets/releases/download/psc-0.13.6-20200127/packages.dhall sha256:06a623f48c49ea1c7675fdf47f81ddb02ae274558e29f511efae1df99ea92fb8 + +let overrides = {=} + +let additions = {=} + +in upstream // overrides // additions diff --git a/examples/log-hash-route/spago.dhall b/examples/log-hash-route/spago.dhall new file mode 100644 index 0000000..d6ac47b --- /dev/null +++ b/examples/log-hash-route/spago.dhall @@ -0,0 +1,10 @@ +{- +Welcome to a Spago project! +You can edit this file as you like. +-} +{ name = "my-project" +, dependencies = + [ "console", "effect", "generics-rep", "psci-support", "routing" ] +, packages = ./packages.dhall +, sources = [ "src/**/*.purs" ] +} diff --git a/examples/log-hash-route/src/Main.purs b/examples/log-hash-route/src/Main.purs new file mode 100644 index 0000000..7aacba6 --- /dev/null +++ b/examples/log-hash-route/src/Main.purs @@ -0,0 +1,8 @@ +module Main where + +import Prelude +import Effect (Effect) +import MyRouting (logRoute) + +main :: Effect (Effect Unit) +main = logRoute diff --git a/examples/log-hash-route/src/Routing.purs b/examples/log-hash-route/src/Routing.purs new file mode 100644 index 0000000..cfdaa5d --- /dev/null +++ b/examples/log-hash-route/src/Routing.purs @@ -0,0 +1,39 @@ +module MyRouting where + +import Prelude +import Data.Foldable (oneOf) +import Data.Generic.Rep (class Generic) +import Data.Generic.Rep.Show (genericShow) +import Effect (Effect) +import Effect.Class.Console (log) +import Routing.Hash (matches) +import Routing.Match (Match, int, lit, str) + +type PostId + = Int + +data MyRoute + = PostIndex + | Post PostId + | PostEdit PostId + | PostBrowse Int String + +derive instance genericMyRoute :: Generic MyRoute _ + +instance showMyRoute :: Show MyRoute where + show = genericShow + +myRoute :: Match MyRoute +myRoute = + lit "posts" + *> oneOf + [ PostEdit <$> int <* lit "edit" + , Post <$> int + , PostBrowse <$> (lit "browse" *> int) <*> str + , pure PostIndex -- Unmatched goes to index too + ] + +logRoute :: Effect (Effect Unit) +logRoute = + matches myRoute \oldRoute newRoute -> + log $ show oldRoute <> " -> " <> show newRoute From 22bbfb4891d5482e18dd4bed2b5fcaae8129522d Mon Sep 17 00:00:00 2001 From: Miles Frain Date: Tue, 9 Jun 2020 18:13:36 -0600 Subject: [PATCH 2/2] Remove examples - these now live in cookbook --- GUIDE.md | 6 --- examples/halogen-render-hash-route/.gitignore | 14 ------ examples/halogen-render-hash-route/README.md | 12 ----- .../halogen-render-hash-route/dev/index.html | 13 ------ .../halogen-render-hash-route/dev/index.js | 1 - .../halogen-render-hash-route/package.json | 14 ------ .../halogen-render-hash-route/packages.dhall | 8 ---- .../halogen-render-hash-route/spago.dhall | 10 ----- .../src/Example.purs | 45 ------------------- .../halogen-render-hash-route/src/Main.purs | 25 ----------- .../src/Routing.purs | 31 ------------- examples/log-hash-route/.gitignore | 14 ------ examples/log-hash-route/README.md | 10 ----- examples/log-hash-route/dev/index.html | 17 ------- examples/log-hash-route/dev/index.js | 1 - examples/log-hash-route/package.json | 14 ------ examples/log-hash-route/packages.dhall | 8 ---- examples/log-hash-route/spago.dhall | 10 ----- examples/log-hash-route/src/Main.purs | 8 ---- examples/log-hash-route/src/Routing.purs | 39 ---------------- 20 files changed, 300 deletions(-) delete mode 100644 examples/halogen-render-hash-route/.gitignore delete mode 100644 examples/halogen-render-hash-route/README.md delete mode 100644 examples/halogen-render-hash-route/dev/index.html delete mode 100644 examples/halogen-render-hash-route/dev/index.js delete mode 100644 examples/halogen-render-hash-route/package.json delete mode 100644 examples/halogen-render-hash-route/packages.dhall delete mode 100644 examples/halogen-render-hash-route/spago.dhall delete mode 100644 examples/halogen-render-hash-route/src/Example.purs delete mode 100644 examples/halogen-render-hash-route/src/Main.purs delete mode 100644 examples/halogen-render-hash-route/src/Routing.purs delete mode 100644 examples/log-hash-route/.gitignore delete mode 100644 examples/log-hash-route/README.md delete mode 100644 examples/log-hash-route/dev/index.html delete mode 100644 examples/log-hash-route/dev/index.js delete mode 100644 examples/log-hash-route/package.json delete mode 100644 examples/log-hash-route/packages.dhall delete mode 100644 examples/log-hash-route/spago.dhall delete mode 100644 examples/log-hash-route/src/Main.purs delete mode 100644 examples/log-hash-route/src/Routing.purs diff --git a/GUIDE.md b/GUIDE.md index 688a536..ee4a07f 100644 --- a/GUIDE.md +++ b/GUIDE.md @@ -5,12 +5,6 @@ * An `Applicative` parsing framework for paths (`Routing.Match`) * Routing effects and events (`Routing.Hash` or `Routing.PushState`) -# Quick examples - -If you prefer to learn from a small working example that contains the end-result of material in this guide, you may `cd` to any of the directories in `examples` and follow their `README.md` instructions. Current examples include: -* `log-hash-route` - Hash-based routing that logs routes to console. -* `halogen-render-hash-route` - Hash-based routing that renders routes to page with Halogen. - ## Parsing routes with `Routing.Match` In many routing frameworks, you might start by using a stringly-typed DSL for diff --git a/examples/halogen-render-hash-route/.gitignore b/examples/halogen-render-hash-route/.gitignore deleted file mode 100644 index 2e01a20..0000000 --- a/examples/halogen-render-hash-route/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -/bower_components/ -/node_modules/ -/.pulp-cache/ -/output/ -/generated-docs/ -/.psc-package/ -/.psc* -/.purs* -/.psa* -/.spago -/.cache/ -/dist/ -/dev-dist/ -/prod/* diff --git a/examples/halogen-render-hash-route/README.md b/examples/halogen-render-hash-route/README.md deleted file mode 100644 index f6e800d..0000000 --- a/examples/halogen-render-hash-route/README.md +++ /dev/null @@ -1,12 +0,0 @@ -### Quick Start -``` -npm run build -npm run serve -``` - -When you click on the links, you should see: -* The anchor in the URL change -* The current route rendered on the page -* Route changes logged to the dev console - -You may also edit the URL directly instead of clicking on the links. diff --git a/examples/halogen-render-hash-route/dev/index.html b/examples/halogen-render-hash-route/dev/index.html deleted file mode 100644 index 48f4021..0000000 --- a/examples/halogen-render-hash-route/dev/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - Render routes - - - - - - - \ No newline at end of file diff --git a/examples/halogen-render-hash-route/dev/index.js b/examples/halogen-render-hash-route/dev/index.js deleted file mode 100644 index db8b552..0000000 --- a/examples/halogen-render-hash-route/dev/index.js +++ /dev/null @@ -1 +0,0 @@ -require("../output/Main/index.js").main(); diff --git a/examples/halogen-render-hash-route/package.json b/examples/halogen-render-hash-route/package.json deleted file mode 100644 index b7ef29e..0000000 --- a/examples/halogen-render-hash-route/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "license": "MIT", - "devDependencies": { - "parcel": "^1.12.4", - "purescript": "^0.13.8", - "spago": "^0.15.2" - }, - "scripts": { - "build": "spago build", - "serve": "parcel dev/index.html --out-dir dev-dist --open", - "prep-prod": "cp dev/index.html prod && rm -rf dist", - "build-prod": "npm run prep-prod && spago bundle-app --to prod/index.js && parcel build prod/index.html" - } -} diff --git a/examples/halogen-render-hash-route/packages.dhall b/examples/halogen-render-hash-route/packages.dhall deleted file mode 100644 index dbe04f4..0000000 --- a/examples/halogen-render-hash-route/packages.dhall +++ /dev/null @@ -1,8 +0,0 @@ -let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.13.6-20200127/packages.dhall sha256:06a623f48c49ea1c7675fdf47f81ddb02ae274558e29f511efae1df99ea92fb8 - -let overrides = {=} - -let additions = {=} - -in upstream // overrides // additions diff --git a/examples/halogen-render-hash-route/spago.dhall b/examples/halogen-render-hash-route/spago.dhall deleted file mode 100644 index f92131e..0000000 --- a/examples/halogen-render-hash-route/spago.dhall +++ /dev/null @@ -1,10 +0,0 @@ -{- -Welcome to a Spago project! -You can edit this file as you like. --} -{ name = "my-project" -, dependencies = - [ "console", "effect", "generics-rep", "halogen", "psci-support", "routing" ] -, packages = ./packages.dhall -, sources = [ "src/**/*.purs" ] -} diff --git a/examples/halogen-render-hash-route/src/Example.purs b/examples/halogen-render-hash-route/src/Example.purs deleted file mode 100644 index 2df9a02..0000000 --- a/examples/halogen-render-hash-route/src/Example.purs +++ /dev/null @@ -1,45 +0,0 @@ -module Example where - -import Prelude -import Data.Maybe (Maybe(..)) -import Halogen as H -import Halogen.HTML as HH -import Halogen.HTML.Properties as HP -import MyRouting (MyRoute) - -type State - = Maybe MyRoute - --- Query must be (Type -> Type) -data Query a - = Nav MyRoute a - -component :: forall i o m. H.Component HH.HTML Query i o m -component = - H.mkComponent - { initialState: const Nothing - , render - , eval: - H.mkEval - $ H.defaultEval - { handleQuery = handleQuery - } - } - -render :: forall a m. State -> H.ComponentHTML a () m -render state = - let - renderLink link txt = HH.div_ [ HH.a [ HP.href link ] [ HH.text txt ] ] - in - HH.div_ - [ HH.text $ show state - , renderLink "#posts/" "Index" - , renderLink "#posts/8" "View post 8" - , renderLink "#posts/8/edit" "Edit post 8" - , renderLink "#posts/browse/2004/June" "Browse 2004 June" - ] - -handleQuery ∷ forall a ac o m. Query a → H.HalogenM State ac () o m (Maybe a) -handleQuery (Nav route a) = do - H.put $ Just route - pure (Just a) diff --git a/examples/halogen-render-hash-route/src/Main.purs b/examples/halogen-render-hash-route/src/Main.purs deleted file mode 100644 index a765e87..0000000 --- a/examples/halogen-render-hash-route/src/Main.purs +++ /dev/null @@ -1,25 +0,0 @@ -module Main where - -import Prelude -import Data.Maybe (Maybe(..)) -import Effect (Effect) -import Effect.Aff (launchAff_) -import Effect.Class (liftEffect) -import Effect.Class.Console (log) -import Example (Query(..)) -import Example as Example -import Halogen as H -import Halogen.Aff as HA -import Halogen.VDom.Driver (runUI) -import MyRouting (myRoute) -import Routing.Hash (matches) - -main :: Effect Unit -main = - HA.runHalogenAff do - body <- HA.awaitBody - halogenIO <- runUI Example.component Nothing body - void $ liftEffect - $ matches myRoute \oldRoute newRoute -> do - log $ show oldRoute <> " -> " <> show newRoute - launchAff_ $ halogenIO.query $ H.tell $ Nav newRoute diff --git a/examples/halogen-render-hash-route/src/Routing.purs b/examples/halogen-render-hash-route/src/Routing.purs deleted file mode 100644 index f2ac3fa..0000000 --- a/examples/halogen-render-hash-route/src/Routing.purs +++ /dev/null @@ -1,31 +0,0 @@ -module MyRouting where - -import Prelude -import Data.Foldable (oneOf) -import Data.Generic.Rep (class Generic) -import Data.Generic.Rep.Show (genericShow) -import Routing.Match (Match, int, lit, str) - -type PostId - = Int - -data MyRoute - = PostIndex - | Post PostId - | PostEdit PostId - | PostBrowse Int String - -derive instance genericMyRoute :: Generic MyRoute _ - -instance showMyRoute :: Show MyRoute where - show = genericShow - -myRoute :: Match MyRoute -myRoute = - lit "posts" - *> oneOf - [ PostEdit <$> int <* lit "edit" - , Post <$> int - , PostBrowse <$> (lit "browse" *> int) <*> str - , pure PostIndex -- Unmatched goes to index too - ] diff --git a/examples/log-hash-route/.gitignore b/examples/log-hash-route/.gitignore deleted file mode 100644 index 2e01a20..0000000 --- a/examples/log-hash-route/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -/bower_components/ -/node_modules/ -/.pulp-cache/ -/output/ -/generated-docs/ -/.psc-package/ -/.psc* -/.purs* -/.psa* -/.spago -/.cache/ -/dist/ -/dev-dist/ -/prod/* diff --git a/examples/log-hash-route/README.md b/examples/log-hash-route/README.md deleted file mode 100644 index 9e1d236..0000000 --- a/examples/log-hash-route/README.md +++ /dev/null @@ -1,10 +0,0 @@ -### Quick Start -``` -npm run build -npm run serve -``` - -Then open up the browser console, and click on the links. -You should see the anchor in the URL change, and the route changes logged in the console. - -You may also edit the URL directly instead of clicking on the links. diff --git a/examples/log-hash-route/dev/index.html b/examples/log-hash-route/dev/index.html deleted file mode 100644 index 62d37cb..0000000 --- a/examples/log-hash-route/dev/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - Log routes - - - -
Index
-
View post 8
-
Edit post 8
-
Browse 2004 June
- - - - \ No newline at end of file diff --git a/examples/log-hash-route/dev/index.js b/examples/log-hash-route/dev/index.js deleted file mode 100644 index db8b552..0000000 --- a/examples/log-hash-route/dev/index.js +++ /dev/null @@ -1 +0,0 @@ -require("../output/Main/index.js").main(); diff --git a/examples/log-hash-route/package.json b/examples/log-hash-route/package.json deleted file mode 100644 index b7ef29e..0000000 --- a/examples/log-hash-route/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "license": "MIT", - "devDependencies": { - "parcel": "^1.12.4", - "purescript": "^0.13.8", - "spago": "^0.15.2" - }, - "scripts": { - "build": "spago build", - "serve": "parcel dev/index.html --out-dir dev-dist --open", - "prep-prod": "cp dev/index.html prod && rm -rf dist", - "build-prod": "npm run prep-prod && spago bundle-app --to prod/index.js && parcel build prod/index.html" - } -} diff --git a/examples/log-hash-route/packages.dhall b/examples/log-hash-route/packages.dhall deleted file mode 100644 index dbe04f4..0000000 --- a/examples/log-hash-route/packages.dhall +++ /dev/null @@ -1,8 +0,0 @@ -let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.13.6-20200127/packages.dhall sha256:06a623f48c49ea1c7675fdf47f81ddb02ae274558e29f511efae1df99ea92fb8 - -let overrides = {=} - -let additions = {=} - -in upstream // overrides // additions diff --git a/examples/log-hash-route/spago.dhall b/examples/log-hash-route/spago.dhall deleted file mode 100644 index d6ac47b..0000000 --- a/examples/log-hash-route/spago.dhall +++ /dev/null @@ -1,10 +0,0 @@ -{- -Welcome to a Spago project! -You can edit this file as you like. --} -{ name = "my-project" -, dependencies = - [ "console", "effect", "generics-rep", "psci-support", "routing" ] -, packages = ./packages.dhall -, sources = [ "src/**/*.purs" ] -} diff --git a/examples/log-hash-route/src/Main.purs b/examples/log-hash-route/src/Main.purs deleted file mode 100644 index 7aacba6..0000000 --- a/examples/log-hash-route/src/Main.purs +++ /dev/null @@ -1,8 +0,0 @@ -module Main where - -import Prelude -import Effect (Effect) -import MyRouting (logRoute) - -main :: Effect (Effect Unit) -main = logRoute diff --git a/examples/log-hash-route/src/Routing.purs b/examples/log-hash-route/src/Routing.purs deleted file mode 100644 index cfdaa5d..0000000 --- a/examples/log-hash-route/src/Routing.purs +++ /dev/null @@ -1,39 +0,0 @@ -module MyRouting where - -import Prelude -import Data.Foldable (oneOf) -import Data.Generic.Rep (class Generic) -import Data.Generic.Rep.Show (genericShow) -import Effect (Effect) -import Effect.Class.Console (log) -import Routing.Hash (matches) -import Routing.Match (Match, int, lit, str) - -type PostId - = Int - -data MyRoute - = PostIndex - | Post PostId - | PostEdit PostId - | PostBrowse Int String - -derive instance genericMyRoute :: Generic MyRoute _ - -instance showMyRoute :: Show MyRoute where - show = genericShow - -myRoute :: Match MyRoute -myRoute = - lit "posts" - *> oneOf - [ PostEdit <$> int <* lit "edit" - , Post <$> int - , PostBrowse <$> (lit "browse" *> int) <*> str - , pure PostIndex -- Unmatched goes to index too - ] - -logRoute :: Effect (Effect Unit) -logRoute = - matches myRoute \oldRoute newRoute -> - log $ show oldRoute <> " -> " <> show newRoute