2017-07-17 14:05:38 +00:00
|
|
|
module Views.EventDetail exposing (eventDetailView)
|
2017-07-17 10:53:38 +00:00
|
|
|
|
|
|
|
-- 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 Markdown
|
2017-07-18 11:35:17 +00:00
|
|
|
import Date.Extra as DateExtra
|
2017-07-17 10:53:38 +00:00
|
|
|
|
|
|
|
|
2017-07-17 14:05:38 +00:00
|
|
|
eventDetailView : EventSlug -> Model -> Html Msg
|
|
|
|
eventDetailView eventSlug model =
|
2017-07-17 10:53:38 +00:00
|
|
|
let
|
|
|
|
event =
|
2017-07-17 14:05:38 +00:00
|
|
|
case List.head (List.filter (\e -> e.slug == eventSlug) model.events) of
|
2017-07-17 10:53:38 +00:00
|
|
|
Just event ->
|
|
|
|
event
|
|
|
|
|
|
|
|
Nothing ->
|
2017-07-18 11:35:17 +00:00
|
|
|
{ title = "", slug = "", abstract = "", speakers = [], videoRecording = False, videoUrl = "" }
|
2017-07-17 10:53:38 +00:00
|
|
|
in
|
|
|
|
div [ class "row" ]
|
|
|
|
[ div [ class "col-sm-9" ]
|
|
|
|
[ a [ href "#" ]
|
|
|
|
[ text "Back"
|
|
|
|
]
|
2017-07-17 14:05:38 +00:00
|
|
|
, h4 [] [ text event.title ]
|
2017-07-17 10:53:38 +00:00
|
|
|
, p [] [ Markdown.toHtml [] event.abstract ]
|
|
|
|
, hr [] []
|
2017-07-17 15:59:38 +00:00
|
|
|
, eventInstancesList eventSlug model.eventInstances
|
2017-07-17 10:53:38 +00:00
|
|
|
]
|
|
|
|
, div
|
|
|
|
[ classList
|
|
|
|
[ ( "col-sm-3", True )
|
|
|
|
, ( "schedule-sidebar", True )
|
|
|
|
]
|
|
|
|
]
|
2017-07-18 11:35:17 +00:00
|
|
|
[ videoRecordingSidebar event
|
|
|
|
, speakerSidebar event.speakers
|
2017-07-17 10:53:38 +00:00
|
|
|
]
|
|
|
|
]
|
2017-07-17 15:59:38 +00:00
|
|
|
|
|
|
|
|
2017-07-18 11:35:17 +00:00
|
|
|
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)
|
|
|
|
]
|
|
|
|
|
|
|
|
|
2017-07-17 15:59:38 +00:00
|
|
|
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 []
|
2017-07-17 19:48:56 +00:00
|
|
|
[ text
|
2017-07-18 11:35:17 +00:00
|
|
|
((DateExtra.toFormattedString "y-MM-dd HH:mm" eventInstance.from)
|
2017-07-17 19:48:56 +00:00
|
|
|
++ " to "
|
2017-07-18 11:35:17 +00:00
|
|
|
++ (DateExtra.toFormattedString "y-MM-d HH:mm" eventInstance.to)
|
2017-07-17 19:48:56 +00:00
|
|
|
)
|
2017-07-17 15:59:38 +00:00
|
|
|
]
|