reorganize site into two sections

This commit is contained in:
Ryan Haskell-Glatz 2021-04-25 14:36:16 -05:00
parent 178a48d2c8
commit 1ca83ce529
25 changed files with 113 additions and 76 deletions

View File

@ -1,7 +1,29 @@
# Examples # Examples
Here are real-world applications using __elm-spa__: Prefer to learn by example? Wonderful! The source code for all of the examples on this site can be found in the Github repo's [examples](https://github.com/ryannhg/elm-spa/tree/main/examples) folder.
- This site ## Featured examples
- Realworld example app
- User featured projects ### Hello, world!
[![Hello, world!](/content/images/01-hello-world.png)](/examples/01-hello-world)
### Pages & routing
[![Hello, world!](/content/images/01-hello-world.png)](/examples/01-hello-world)
### Local storage
[![Hello, world!](/content/images/01-hello-world.png)](/examples/01-hello-world)
### User authentication
[![Hello, world!](/content/images/01-hello-world.png)](/examples/01-hello-world)
### Testing
[![Hello, world!](/content/images/01-hello-world.png)](/examples/01-hello-world)
### Working with NPM
[![Hello, world!](/content/images/01-hello-world.png)](/examples/01-hello-world)

View File

@ -0,0 +1,3 @@
# Storage
> Coming soon!

View File

@ -17,7 +17,7 @@ __Great news:__ This is exactly what we can do in __elm-spa__!
## Protected pages ## Protected pages
At the end of the [pages docs](/docs/pages#pageprotected), we learned that there are also `protected` versions of every __page type__. At the end of the [pages docs](/guide/pages#pageprotected), we learned that there are also `protected` versions of every __page type__.
These protected pages have slightly different signatures: These protected pages have slightly different signatures:
@ -116,7 +116,7 @@ But before that code will work we need to take care of two things:
## Updating Shared.elm ## Updating Shared.elm
If you haven't already ejected `Shared.elm`, you should move it from `.elm-spa/defaults` into your `src` folder. The [shared state](/docs/shared-state) docs cover this file in depth, but we'll provide all the code you'll need to change here. If you haven't already ejected `Shared.elm`, you should move it from `.elm-spa/defaults` into your `src` folder. The [shared state](/guide/shared-state) docs cover this file in depth, but we'll provide all the code you'll need to change here.
Let's change `Shared.Model` to keep track of a `Maybe User`, the value that can either be a user or nothing: Let's change `Shared.Model` to keep track of a `Maybe User`, the value that can either be a user or nothing:
@ -382,4 +382,4 @@ Now everything is working! Visiting the `/sign-in` page and clicking "Sign In" s
#### But wait... #### But wait...
When we refresh the page, the user is signed out... how can we keep them signed in after refresh? Sounds like a job for [local storage](/guides/local-storage)! When we refresh the page, the user is signed out... how can we keep them signed in after refresh? Sounds like a job for [local storage](/examples/local-storage)!

View File

@ -0,0 +1,3 @@
# Testing
> Coming soon!

View File

@ -0,0 +1,3 @@
# Working with NPM
> Coming soon!

View File

@ -1,4 +1,4 @@
# Docs # Guide
Welcome to __elm-spa__, a framework for building web applications with [Elm](https://elm-lang.org)! Welcome to __elm-spa__, a framework for building web applications with [Elm](https://elm-lang.org)!
If you are new to Elm, you should check out [the official guide](https://guide.elm-lang.org), which If you are new to Elm, you should check out [the official guide](https://guide.elm-lang.org), which
@ -68,4 +68,4 @@ Visit https://elm-spa.dev for more!
__Ready for more?__ __Ready for more?__
Let's check out [the CLI](/docs/cli) to learn more about those five commands! Let's check out [the CLI](/guide/cli) to learn more about those five commands!

View File

@ -10,9 +10,10 @@ This gave us the ability to run a few commands:
1. [__elm-spa new__](#elm-spa-new) - creates a new project 1. [__elm-spa new__](#elm-spa-new) - creates a new project
1. [__elm-spa server__](#elm-spa-server) - runs a dev server as you code 1. [__elm-spa server__](#elm-spa-server) - runs a dev server as you code
1. [__elm-spa watch__](#elm-spa-watch) - builds as you code
1. [__elm-spa build__](#elm-spa-build) - one-time production build
1. [__elm-spa add__](#elm-spa-add) - adds a page to an existing project 1. [__elm-spa add__](#elm-spa-add) - adds a page to an existing project
1. [__elm-spa build__](#elm-spa-build) - one-time production build
1. [__elm-spa gen__](#elm-spa-gen) - generates files, without elm make
1. [__elm-spa watch__](#elm-spa-watch) - generates files as you code
What do these do? This section of the guide dives into more detail on each command! What do these do? This section of the guide dives into more detail on each command!
@ -49,27 +50,6 @@ This will start a development server for your project at [http://localhost:1234]
When we edit our code, `elm-spa server` automatically compiles your application. When we edit our code, `elm-spa server` automatically compiles your application.
## elm-spa watch
If you want the automatic compilation on change, but don't need a HTTP server, you can use the `elm-spa watch` command:
```terminal
elm-spa watch
```
This will automatically generate code and compile your Elm files on save, but without the server. This is a great command to combine __elm-spa__ with another tool like [Parcel](https://parceljs.org/elm.html).
## elm-spa build
The `server` and `watch` commands are great for development, but for __production__, we'll want the `elm-spa build` command.
```terminal
elm-spa build
```
This compiles your app into __an optimized and minified JS file__. This makes it great for serving your application in the real world!
## elm-spa add ## elm-spa add
@ -103,3 +83,35 @@ elm-spa add /example static
elm-spa add /example sandbox elm-spa add /example sandbox
elm-spa add /example element elm-spa add /example element
``` ```
## elm-spa build
The `server` and `watch` commands are great for development, but for __production__, we'll want the `elm-spa build` command.
```terminal
elm-spa build
```
This compiles your app into __an optimized and minified JS file__. This makes it great for serving your application in the real world!
## elm-spa gen
If you are working with another dev server, you won't need the `.js` file generated by the `build` command. To only generate __elm-spa__ files, use the `elm-spa gen` command:
```terminal
elm-spa gen
```
This will generate files in the `.elm-spa` folder, but allow your custom workflow to define it's own way of compiling Elm. This is a great command to combine __elm-spa__ with another tool like [Vite](/examples/05-npm) or [Parcel](https://parceljs.org/elm.html).
## elm-spa watch
If you want the automatic code generation on change, but don't need elm make or an HTTP server, you can use the `elm-spa watch` command:
```terminal
elm-spa watch
```
This will automatically generate code and compile your Elm files on save, but without the server.

View File

@ -227,7 +227,7 @@ view : Model -> View Msg
subscriptions : Model -> Sub Msg subscriptions : Model -> Sub Msg
``` ```
This `Effect Msg` value also allows support for folks using [elm-program-test](https://package.elm-lang.org/packages/avh4/elm-program-test/latest/), which requires users to define their own custom type on top of `Cmd Msg`. More about that in the [testing guide](/guides/06-testing) This `Effect Msg` value also allows support for folks using [elm-program-test](https://package.elm-lang.org/packages/avh4/elm-program-test/latest/), which requires users to define their own custom type on top of `Cmd Msg`. More about that in the [testing guide](/examples/06-testing)
## Page.protected ## Page.protected
@ -250,4 +250,4 @@ Page.protected.sandbox
} }
``` ```
When you are ready for user authentication, you can learn more about using `Page.protected` in the [authentication guide](/guides/04-authentication). When you are ready for user authentication, you can learn more about using `Page.protected` in the [authentication guide](/examples/04-authentication).

View File

@ -16,7 +16,7 @@ In this section, we'll cover the different kinds of routes you'll find in every
## The homepage ## The homepage
`Home_.elm` is a reserved filename that handles requests to your homepage. The easiest way to add a new homepage is with the [`elm-spa add`](/docs/cli#elm-spa-add) covered in the CLI docs: `Home_.elm` is a reserved filename that handles requests to your homepage. The easiest way to add a new homepage is with the [`elm-spa add`](/guide/cli#elm-spa-add) covered in the CLI docs:
```terminal ```terminal
elm-spa add / elm-spa add /

View File

@ -52,7 +52,7 @@ type alias User =
} }
``` ```
As we saw in the [pages guide](/docs/pages), this `Shared.Model` will be passed into every page so we can check if `shared.user` has a value or not! As we saw in the [pages guide](/guide/pages), this `Shared.Model` will be passed into every page so we can check if `shared.user` has a value or not!
## Shared.init ## Shared.init
@ -65,7 +65,7 @@ init flags req =
The `init` function is called when your application loads for the first time. It takes in two inputs: The `init` function is called when your application loads for the first time. It takes in two inputs:
- `Flags` - initial JS values passed in on startup. - `Flags` - initial JS values passed in on startup.
- `Request` - the [Request](/docs/request) value with current URL information. - `Request` - the [Request](/guide/request) value with current URL information.
The `init` function returns the initial `Shared.Model`, as well as any side effect's you'd like to run (like initial HTTP requests, etc) The `init` function returns the initial `Shared.Model`, as well as any side effect's you'd like to run (like initial HTTP requests, etc)

View File

@ -12,7 +12,7 @@ This might be useful when you need to show the active link in your navbar, or na
## req.params ## req.params
Every [dynamic route](/docs/routing#dynamic-routes) has parameters that you'll want to get access to. For [static routes](/docs/routing@static-routes), those parameters will be `()`: Every [dynamic route](/guide/routing#dynamic-routes) has parameters that you'll want to get access to. For [static routes](/guide/routing@static-routes), those parameters will be `()`:
URL | Request URL | Request
--- | --- --- | ---

View File

@ -1,7 +0,0 @@
# Guides
Ready to get started with __elm-spa__? Me too!
...
Unfortunately, I haven't uploaded any guides yet...

View File

@ -1 +0,0 @@
# Local storage

View File

@ -1 +0,0 @@
# Working with NPM

View File

@ -279,6 +279,15 @@ hr { border: 0; }
transform: translate(50%, -25%); transform: translate(50%, -25%);
} }
.markdown a img {
transition: transform 200ms ease-in-out, opacity 200ms ease-in-out;
}
.markdown a img:hover {
transform: scale(1.05);
opacity: 0.75;
}
.bold { .bold {
font-weight: var(--weight--bold); font-weight: var(--weight--bold);
} }

View File

@ -106,8 +106,7 @@ sections : Index -> List Section
sections index = sections index =
let let
sectionOrder = sectionOrder =
[ "Docs" [ "Guide"
, "Guides"
, "Examples" , "Examples"
] ]
@ -143,6 +142,7 @@ sections index =
index index
|> List.filter (.url >> (\url -> String.startsWith top.url url && url /= top.url)) |> List.filter (.url >> (\url -> String.startsWith top.url url && url /= top.url))
|> toLabelUrls |> toLabelUrls
|> List.sortBy .url
|> toSection top |> toSection top
) )
|> List.sortBy |> List.sortBy

View File

@ -1,4 +1,4 @@
module Pages.Guides.Section_ exposing (Model, Msg, page) module Pages.Examples.Section_ exposing (Model, Msg, page)
import Page import Page
import Request import Request

View File

@ -1,4 +1,4 @@
module Pages.Docs exposing (Model, Msg, page) module Pages.Guide exposing (Model, Msg, page)
import Page import Page
import Request import Request

View File

@ -1,4 +1,4 @@
module Pages.Docs.Section_ exposing (Model, Msg, page) module Pages.Guide.Section_ exposing (Model, Msg, page)
import Page import Page
import Request import Request

View File

@ -1,19 +0,0 @@
module Pages.Guides exposing (Model, Msg, page)
import Page
import Request
import Shared
import UI.Docs
page : Shared.Model -> Request.With params -> Page.With Model Msg
page =
UI.Docs.page
type alias Model =
UI.Docs.Model
type alias Msg =
UI.Docs.Msg

View File

@ -32,6 +32,6 @@ view =
{ title = "404" { title = "404"
, description = "that page wasn't found." , description = "that page wasn't found."
} }
, UI.markdown { withHeaderLinks = False } "### Well, that's a shame...\n\nHow about the [homepage?](/)" , UI.markdown { withHeaderLinks = False } "## But that's alright.\n\nThere's always [the homepage](/)!"
] ]
} }

View File

@ -125,10 +125,23 @@ navbar { onMsg, model, shared, url } =
let let
navLink : { text : String, route : Route } -> Html msg navLink : { text : String, route : Route } -> Html msg
navLink options = navLink options =
let
href : String
href =
Route.toHref options.route
in
Html.a Html.a
[ Attr.class "link" [ Attr.class "link"
, Attr.href (Route.toHref options.route) , Attr.href href
, Attr.classList [ ( "bold text-blue", String.startsWith (Route.toHref options.route) url.path ) ] , Attr.classList
[ ( "bold text-blue"
, if href == "/" then
href == url.path
else
String.startsWith href url.path
)
]
] ]
[ Html.text options.text ] [ Html.text options.text ]
in in
@ -138,8 +151,8 @@ navbar { onMsg, model, shared, url } =
[ Html.div [ Attr.class "row align-center gap-lg" ] [ Html.div [ Attr.class "row align-center gap-lg" ]
[ Html.a [ Attr.class "header__logo", Attr.href "/" ] [ UI.logo ] [ Html.a [ Attr.class "header__logo", Attr.href "/" ] [ UI.logo ]
, Html.nav [ Attr.class "row gap-md hidden-mobile pad-left-xs" ] , Html.nav [ Attr.class "row gap-md hidden-mobile pad-left-xs" ]
[ navLink { text = "docs", route = Route.Docs } [ navLink { text = "about", route = Route.Home_ }
, navLink { text = "guides ", route = Route.Guides } , navLink { text = "guide", route = Route.Guide }
, navLink { text = "examples", route = Route.Examples } , navLink { text = "examples", route = Route.Examples }
] ]
] ]