bornhack-website/schedule/src/Views/EventDetail.elm

109 lines
3.2 KiB
Elm

module Views.EventDetail exposing (eventDetailView)
-- Local modules
import Messages exposing (Msg(..))
import Models exposing (..)
-- External modules
import Html exposing (Html, text, div, ul, li, span, i, h4, a, p, hr)
import Html.Attributes exposing (class, classList, href)
import Html.Events exposing (onClick)
import Markdown
import Date.Extra
eventDetailView : EventSlug -> Model -> Html Msg
eventDetailView eventSlug model =
let
event =
case List.head (List.filter (\e -> e.slug == eventSlug) model.events) of
Just event ->
event
Nothing ->
{ title = "", slug = "", abstract = "", speakers = [], videoRecording = False, videoUrl = "" }
in
div [ class "row" ]
[ div [ class "col-sm-9" ]
[ a [ onClick BackInHistory, classList [ ( "btn", True ), ( "btn-default", True ) ] ]
[ i [ classList [ ( "fa", True ), ( "fa-chevron-left", True ) ] ] []
, text " Back"
]
, h4 [] [ text event.title ]
, p [] [ Markdown.toHtml [] event.abstract ]
, hr [] []
, eventInstancesList eventSlug model.eventInstances
]
, div
[ classList
[ ( "col-sm-3", True )
, ( "schedule-sidebar", True )
]
]
[ videoRecordingSidebar event
, speakerSidebar event.speakers
]
]
videoRecordingSidebar : Event -> Html Msg
videoRecordingSidebar event =
let
( video, willBeRecorded ) =
if event.videoUrl /= "" then
( h4 [] [ text "Watch the video here!" ], True )
else if event.videoRecording == True then
( h4 [] [ text "This event will be recorded!" ], True )
else
( h4 [] [ text "This event will NOT be recorded!" ], False )
in
div [ classList [ ( "alert", True ), ( "alert-danger", not willBeRecorded ), ( "alert-info", willBeRecorded ) ] ]
[ video ]
speakerSidebar : List Speaker -> Html Msg
speakerSidebar speakers =
div []
[ h4 []
[ text "Speakers" ]
, ul
[]
(List.map speakerDetail speakers)
]
speakerDetail : Speaker -> Html Msg
speakerDetail speaker =
li []
[ text speaker.name
]
eventInstancesList : String -> List EventInstance -> Html Msg
eventInstancesList eventSlug eventInstances =
let
instances =
List.filter (\instance -> instance.eventSlug == eventSlug) eventInstances
in
div []
[ h4 []
[ text "This event will occur at:" ]
, ul
[]
(List.map eventInstanceItem instances)
]
eventInstanceItem : EventInstance -> Html Msg
eventInstanceItem eventInstance =
li []
[ text
((Date.Extra.toFormattedString "y-MM-dd HH:mm" eventInstance.from)
++ " to "
++ (Date.Extra.toFormattedString "y-MM-d HH:mm" eventInstance.to)
)
]