mirror of
https://github.com/avinal/avinal.github.io.git
synced 2026-07-03 23:30:09 +05:30
e6753e137d
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
77 lines
1.6 KiB
Elm
77 lines
1.6 KiB
Elm
module View exposing
|
|
( View, map
|
|
, none, fromString
|
|
, toBrowserDocument
|
|
)
|
|
|
|
{-|
|
|
|
|
@docs View, map
|
|
@docs none, fromString
|
|
@docs toBrowserDocument
|
|
|
|
-}
|
|
|
|
import Browser
|
|
import Html exposing (Html)
|
|
import Html.Attributes exposing (class)
|
|
import Route exposing (Route)
|
|
import Shared.Model
|
|
|
|
|
|
type alias View msg =
|
|
{ title : String
|
|
, body : List (Html msg)
|
|
}
|
|
|
|
|
|
{-| Used internally by Elm Land to create your application
|
|
so it works with Elm's expected `Browser.Document msg` type.
|
|
-}
|
|
toBrowserDocument :
|
|
{ shared : Shared.Model.Model
|
|
, route : Route ()
|
|
, view : View msg
|
|
}
|
|
-> Browser.Document msg
|
|
toBrowserDocument { view } =
|
|
{ title = view.title ++ " | Avinal's personal website"
|
|
, body =
|
|
[ Html.main_ [ class "container mx-auto bg-neutral-800" ]
|
|
view.body
|
|
]
|
|
}
|
|
|
|
|
|
{-| Used internally by Elm Land to connect your pages together.
|
|
-}
|
|
map : (msg1 -> msg2) -> View msg1 -> View msg2
|
|
map fn view =
|
|
{ title = view.title
|
|
, body = List.map (Html.map fn) view.body
|
|
}
|
|
|
|
|
|
{-| Used internally by Elm Land whenever transitioning between
|
|
authenticated pages.
|
|
-}
|
|
none : View msg
|
|
none =
|
|
{ title = "Avinal Kumar | Personal Website"
|
|
, body = []
|
|
}
|
|
|
|
|
|
{-| If you customize the `View` module, anytime you run `elm-land add page`,
|
|
the generated page will use this when adding your `view` function.
|
|
|
|
That way your app will compile after adding new pages, and you can see
|
|
the new page working in the web browser!
|
|
|
|
-}
|
|
fromString : String -> View msg
|
|
fromString moduleName =
|
|
{ title = moduleName
|
|
, body = []
|
|
}
|