Skip to content

Instantly share code, notes, and snippets.

parseToken : Parser (Maybe Token -> a) a
parseToken =
custom "ACCESS_TOKEN" <|
\segment ->
case String.split "&" segment |> List.map (String.split "=") of
[ [ "access_token", accessToken ]
, [ "expires_in", expires ]
, [ "token_type", type_ ]
, [ "state", state ]
, [ "id_token", idToken ] ] ->
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
OnLocationChange location ->
( { model | route = parseLocation location }, [] )
|> andThen reroute
|> Tuple.mapSecond batch
UpdateRoute route ->
updateRoute route model
@grrinchas
grrinchas / Main.elm
Last active December 29, 2017 22:46
reroute : Model -> ( Model, List (Cmd msg) )
reroute model =
case ( model.route, isSuccess model.user, isSuccess model.account) of
( SignUpRoute, False, True) ->
( { model | account = RemoteData.NotAsked }, [ Navigation.newUrl <| path LoginRoute ] )
( LoginRoute, True, _) ->
( model, [ Navigation.modifyUrl <| path HomeRoute ] )
( SignUpRoute, True, _) ->
( model, [ Navigation.modifyUrl <| path HomeRoute ] )
( CreatePostRoute, False, _) ->
@grrinchas
grrinchas / Main.elm
Last active December 29, 2017 22:10
main : Program (Maybe Token) Model Msg
main =
Navigation.programWithFlags OnLocationChange
{ init = init
, view = Pages.view
, update = update
, subscriptions = \model -> Persistence.get OnLoadToken
}
init : Maybe Token -> Location -> ( Model, Cmd Msg )
createPost : Model -> Html Msg
createPost model =
case model.user of
NotAsked ->
error "404 Not Found"
Loading ->
withLoader <| div [] []
Success user ->
layout (userHeader user) (createPostBody model.form)
Failure err ->
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
landing : Model -> Html Msg
landing model =
RemoteData.map userHeader model.user
|> RemoteData.withDefault authHeader
|> flip layout (landingBody model.posts)
readPost : String -> Model -> Html Msg
readPost id model =
case List.head <| List.filter (\post -> post.id == id) model.posts of
Just post ->
.loading-wrapper {
position: fixed;
width: 100%;
height: 100%;
top: 0;
right: 0;
bottom: 0;
left: 0;
cursor: pointer;
z-index: 1000;
withLoader : Html msg -> Html msg
withLoader view = div [class "with-loader"] [view, loading]
loaderPart : String -> Html msg
loaderPart color =
div [ class ("spinner-layer spinner-" ++ color) ]
[ div [ class "circle-clipper left" ]
[ div [ class "circle" ] []
]
, div [ class "gap-patch" ]
@grrinchas
grrinchas / Api.elm
Last active December 25, 2017 12:49
module Api exposing (..)
import Decoders exposing (decodeToken, decodeUser)
import Encoders
import Http exposing (jsonBody)
import Json.Decode
import Messages exposing (Msg)
import Models exposing (Form, Token, User)
import RemoteData