From 5ae96cfa6d3da37a1bc6be37eb605c3a523c78c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=AD=C3=B0ir=20Valberg=20Gu=C3=B0mundsson?= Date: Fri, 10 Aug 2018 16:22:17 +0200 Subject: [PATCH] Add location to events on schedule. --- schedule/src/Views/EventDetail.elm | 90 +++-- src/program/static/js/elm_based_schedule.js | 355 ++++++++++++-------- 2 files changed, 275 insertions(+), 170 deletions(-) diff --git a/schedule/src/Views/EventDetail.elm b/schedule/src/Views/EventDetail.elm index 93e35451..97bb69b0 100644 --- a/schedule/src/Views/EventDetail.elm +++ b/schedule/src/Views/EventDetail.elm @@ -123,14 +123,13 @@ eventDetailSidebar event model = ] (videoRecordingLink ++ [ speakerSidebar speakers - , eventMetaDataSidebar event - , eventInstancesSidebar eventInstances + , eventMetaDataSidebar event eventInstances model ] ) -eventMetaDataSidebar : Event -> Html Msg -eventMetaDataSidebar event = +eventMetaDataSidebar : Event -> List EventInstance -> Model -> Html Msg +eventMetaDataSidebar event eventInstances model = let ( showVideoRecoring, videoRecording ) = case event.videoState of @@ -142,10 +141,23 @@ eventMetaDataSidebar event = _ -> ( False, "" ) + + eventInstanceMetaData = + case eventInstances of + [ instance ] -> + eventInstanceItem instance model + + instances -> + [ h4 [] + [ text "Multiple occurences:" ] + , ul + [] + (List.map (\ei -> li [] <| eventInstanceItem ei model) instances) + ] in div [] - [ h4 [] [ text "Metadata" ] - , ul [] + ([ h4 [] [ text "Metadata" ] + , ul [] ([ li [] [ strong [] [ text "Type: " ], text event.eventType ] ] ++ (case showVideoRecoring of @@ -156,7 +168,44 @@ eventMetaDataSidebar event = [] ) ) + ] + ++ eventInstanceMetaData + ) + + +eventInstanceItem : EventInstance -> Model -> List (Html Msg) +eventInstanceItem eventInstance model = + let + toFormat = + if Date.day eventInstance.from == Date.day eventInstance.to then + "HH:mm" + else + "E HH:mm" + + ( locationName, _ ) = + model.eventLocations + |> List.map unpackFilterType + |> List.filter + (\( _, locationSlug ) -> + locationSlug == eventInstance.location + ) + |> List.head + |> Maybe.withDefault ( "Unknown", "" ) + in + [ p [] + [ strong [] [ text "When: " ] + , text + ((Date.Extra.toFormattedString "E HH:mm" eventInstance.from) + ++ " to " + ++ (Date.Extra.toFormattedString toFormat eventInstance.to) + ) ] + , p [] + [ strong [] [ text "Where: " ] + , text <| locationName ++ " " + , i [ classList [ ( "fa", True ), ( "fa-" ++ eventInstance.locationIcon, True ) ] ] [] + ] + ] speakerSidebar : List Speaker -> Html Msg @@ -175,32 +224,3 @@ speakerDetail speaker = li [] [ a [ href <| routeToString <| SpeakerRoute speaker.slug ] [ text speaker.name ] ] - - -eventInstancesSidebar : List EventInstance -> Html Msg -eventInstancesSidebar eventInstances = - div [] - [ h4 [] - [ text "This event will occur at:" ] - , ul - [] - (List.map eventInstanceItem eventInstances) - ] - - -eventInstanceItem : EventInstance -> Html Msg -eventInstanceItem eventInstance = - let - toFormat = - if Date.day eventInstance.from == Date.day eventInstance.to then - "HH:mm" - else - "E HH:mm" - in - li [] - [ text - ((Date.Extra.toFormattedString "E HH:mm" eventInstance.from) - ++ " to " - ++ (Date.Extra.toFormattedString toFormat eventInstance.to) - ) - ] diff --git a/src/program/static/js/elm_based_schedule.js b/src/program/static/js/elm_based_schedule.js index 7adb6ddb..8eb12b23 100644 --- a/src/program/static/js/elm_based_schedule.js +++ b/src/program/static/js/elm_based_schedule.js @@ -15706,50 +15706,6 @@ var _user$project$Views_DayView$dayView = F2( }); }); -var _user$project$Views_EventDetail$eventInstanceItem = function (eventInstance) { - var toFormat = _elm_lang$core$Native_Utils.eq( - _elm_lang$core$Date$day(eventInstance.from), - _elm_lang$core$Date$day(eventInstance.to)) ? 'HH:mm' : 'E HH:mm'; - return A2( - _elm_lang$html$Html$li, - {ctor: '[]'}, - { - ctor: '::', - _0: _elm_lang$html$Html$text( - A2( - _elm_lang$core$Basics_ops['++'], - A2(_justinmimbs$elm_date_extra$Date_Extra$toFormattedString, 'E HH:mm', eventInstance.from), - A2( - _elm_lang$core$Basics_ops['++'], - ' to ', - A2(_justinmimbs$elm_date_extra$Date_Extra$toFormattedString, toFormat, eventInstance.to)))), - _1: {ctor: '[]'} - }); -}; -var _user$project$Views_EventDetail$eventInstancesSidebar = function (eventInstances) { - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$h4, - {ctor: '[]'}, - { - ctor: '::', - _0: _elm_lang$html$Html$text('This event will occur at:'), - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: A2( - _elm_lang$html$Html$ul, - {ctor: '[]'}, - A2(_elm_lang$core$List$map, _user$project$Views_EventDetail$eventInstanceItem, eventInstances)), - _1: {ctor: '[]'} - } - }); -}; var _user$project$Views_EventDetail$speakerDetail = function (speaker) { return A2( _elm_lang$html$Html$li, @@ -15797,67 +15753,173 @@ var _user$project$Views_EventDetail$speakerSidebar = function (speakers) { } }); }; -var _user$project$Views_EventDetail$eventMetaDataSidebar = function (event) { - var _p0 = function () { - var _p1 = event.videoState; - switch (_p1) { - case 'to-be-recorded': - return {ctor: '_Tuple2', _0: true, _1: 'Yes'}; - case 'not-to-be-recorded': - return {ctor: '_Tuple2', _0: true, _1: 'No'}; - default: - return {ctor: '_Tuple2', _0: false, _1: ''}; - } - }(); - var showVideoRecoring = _p0._0; - var videoRecording = _p0._1; - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { +var _user$project$Views_EventDetail$eventInstanceItem = F2( + function (eventInstance, model) { + var _p0 = A2( + _elm_lang$core$Maybe$withDefault, + {ctor: '_Tuple2', _0: 'Unknown', _1: ''}, + _elm_lang$core$List$head( + A2( + _elm_lang$core$List$filter, + function (_p1) { + var _p2 = _p1; + return _elm_lang$core$Native_Utils.eq(_p2._1, eventInstance.location); + }, + A2(_elm_lang$core$List$map, _user$project$Models$unpackFilterType, model.eventLocations)))); + var locationName = _p0._0; + var toFormat = _elm_lang$core$Native_Utils.eq( + _elm_lang$core$Date$day(eventInstance.from), + _elm_lang$core$Date$day(eventInstance.to)) ? 'HH:mm' : 'E HH:mm'; + return { ctor: '::', _0: A2( - _elm_lang$html$Html$h4, + _elm_lang$html$Html$p, {ctor: '[]'}, { ctor: '::', - _0: _elm_lang$html$Html$text('Metadata'), - _1: {ctor: '[]'} + _0: A2( + _elm_lang$html$Html$strong, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('When: '), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html$text( + A2( + _elm_lang$core$Basics_ops['++'], + A2(_justinmimbs$elm_date_extra$Date_Extra$toFormattedString, 'E HH:mm', eventInstance.from), + A2( + _elm_lang$core$Basics_ops['++'], + ' to ', + A2(_justinmimbs$elm_date_extra$Date_Extra$toFormattedString, toFormat, eventInstance.to)))), + _1: {ctor: '[]'} + } }), _1: { ctor: '::', _0: A2( - _elm_lang$html$Html$ul, + _elm_lang$html$Html$p, {ctor: '[]'}, - A2( - _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$strong, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Where: '), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html$text( + A2(_elm_lang$core$Basics_ops['++'], locationName, ' ')), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$i, + { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$classList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'fa', _1: true}, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: A2(_elm_lang$core$Basics_ops['++'], 'fa-', eventInstance.locationIcon), + _1: true + }, + _1: {ctor: '[]'} + } + }), + _1: {ctor: '[]'} + }, + {ctor: '[]'}), + _1: {ctor: '[]'} + } + } + }), + _1: {ctor: '[]'} + } + }; + }); +var _user$project$Views_EventDetail$eventMetaDataSidebar = F3( + function (event, eventInstances, model) { + var eventInstanceMetaData = function () { + var _p3 = eventInstances; + if ((_p3.ctor === '::') && (_p3._1.ctor === '[]')) { + return A2(_user$project$Views_EventDetail$eventInstanceItem, _p3._0, model); + } else { + return { + ctor: '::', + _0: A2( + _elm_lang$html$Html$h4, + {ctor: '[]'}, { ctor: '::', - _0: A2( - _elm_lang$html$Html$li, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$strong, - {ctor: '[]'}, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Type: '), - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html$text(event.eventType), - _1: {ctor: '[]'} - } - }), + _0: _elm_lang$html$Html$text('Multiple occurences:'), _1: {ctor: '[]'} - }, - function () { - var _p2 = showVideoRecoring; - if (_p2 === true) { - return { + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$ul, + {ctor: '[]'}, + A2( + _elm_lang$core$List$map, + function (ei) { + return A2( + _elm_lang$html$Html$li, + {ctor: '[]'}, + A2(_user$project$Views_EventDetail$eventInstanceItem, ei, model)); + }, + _p3)), + _1: {ctor: '[]'} + } + }; + } + }(); + var _p4 = function () { + var _p5 = event.videoState; + switch (_p5) { + case 'to-be-recorded': + return {ctor: '_Tuple2', _0: true, _1: 'Yes'}; + case 'not-to-be-recorded': + return {ctor: '_Tuple2', _0: true, _1: 'No'}; + default: + return {ctor: '_Tuple2', _0: false, _1: ''}; + } + }(); + var showVideoRecoring = _p4._0; + var videoRecording = _p4._1; + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$h4, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Metadata'), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$ul, + {ctor: '[]'}, + A2( + _elm_lang$core$Basics_ops['++'], + { ctor: '::', _0: A2( _elm_lang$html$Html$li, @@ -15869,47 +15931,74 @@ var _user$project$Views_EventDetail$eventMetaDataSidebar = function (event) { {ctor: '[]'}, { ctor: '::', - _0: _elm_lang$html$Html$text('Recording: '), + _0: _elm_lang$html$Html$text('Type: '), _1: {ctor: '[]'} }), _1: { ctor: '::', - _0: _elm_lang$html$Html$text(videoRecording), + _0: _elm_lang$html$Html$text(event.eventType), _1: {ctor: '[]'} } }), _1: {ctor: '[]'} - }; - } else { - return {ctor: '[]'}; - } - }())), - _1: {ctor: '[]'} - } - }); -}; + }, + function () { + var _p6 = showVideoRecoring; + if (_p6 === true) { + return { + ctor: '::', + _0: A2( + _elm_lang$html$Html$li, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$strong, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Recording: '), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html$text(videoRecording), + _1: {ctor: '[]'} + } + }), + _1: {ctor: '[]'} + }; + } else { + return {ctor: '[]'}; + } + }())), + _1: {ctor: '[]'} + } + }, + eventInstanceMetaData)); + }); var _user$project$Views_EventDetail$getSpeakersFromSlugs = F3( function (speakers, slugs, collectedSpeakers) { getSpeakersFromSlugs: while (true) { - var _p3 = speakers; - if (_p3.ctor === '[]') { + var _p7 = speakers; + if (_p7.ctor === '[]') { return collectedSpeakers; } else { - var _p7 = _p3._0; + var _p11 = _p7._0; var foundSlug = _elm_lang$core$List$head( A2( _elm_lang$core$List$filter, function (slug) { - return _elm_lang$core$Native_Utils.eq(slug, _p7.slug); + return _elm_lang$core$Native_Utils.eq(slug, _p11.slug); }, slugs)); var foundSpeaker = function () { - var _p4 = foundSlug; - if (_p4.ctor === 'Just') { + var _p8 = foundSlug; + if (_p8.ctor === 'Just') { return { ctor: '::', - _0: _p7, + _0: _p11, _1: {ctor: '[]'} }; } else { @@ -15918,28 +16007,28 @@ var _user$project$Views_EventDetail$getSpeakersFromSlugs = F3( }(); var newCollectedSpeakers = A2(_elm_lang$core$Basics_ops['++'], collectedSpeakers, foundSpeaker); var newSlugs = function () { - var _p5 = foundSlug; - if (_p5.ctor === 'Just') { + var _p9 = foundSlug; + if (_p9.ctor === 'Just') { return A2( _elm_lang$core$List$filter, function (x) { - return !_elm_lang$core$Native_Utils.eq(x, _p5._0); + return !_elm_lang$core$Native_Utils.eq(x, _p9._0); }, slugs); } else { return slugs; } }(); - var _p6 = slugs; - if (_p6.ctor === '[]') { + var _p10 = slugs; + if (_p10.ctor === '[]') { return collectedSpeakers; } else { - var _v6 = _p3._1, - _v7 = newSlugs, - _v8 = newCollectedSpeakers; - speakers = _v6; - slugs = _v7; - collectedSpeakers = _v8; + var _v8 = _p7._1, + _v9 = newSlugs, + _v10 = newCollectedSpeakers; + speakers = _v8; + slugs = _v9; + collectedSpeakers = _v10; continue getSpeakersFromSlugs; } } @@ -15959,8 +16048,8 @@ var _user$project$Views_EventDetail$eventDetailSidebar = F2( }, model.eventInstances); var videoRecordingLink = function () { - var _p8 = event.videoUrl; - if (_p8.ctor === 'Nothing') { + var _p12 = event.videoUrl; + if (_p12.ctor === 'Nothing') { return {ctor: '[]'}; } else { return { @@ -15969,7 +16058,7 @@ var _user$project$Views_EventDetail$eventDetailSidebar = F2( _elm_lang$html$Html$a, { ctor: '::', - _0: _elm_lang$html$Html_Attributes$href(_p8._0), + _0: _elm_lang$html$Html_Attributes$href(_p12._0), _1: { ctor: '::', _0: _elm_lang$html$Html_Attributes$classList( @@ -16034,12 +16123,8 @@ var _user$project$Views_EventDetail$eventDetailSidebar = F2( _0: _user$project$Views_EventDetail$speakerSidebar(speakers), _1: { ctor: '::', - _0: _user$project$Views_EventDetail$eventMetaDataSidebar(event), - _1: { - ctor: '::', - _0: _user$project$Views_EventDetail$eventInstancesSidebar(eventInstances), - _1: {ctor: '[]'} - } + _0: A3(_user$project$Views_EventDetail$eventMetaDataSidebar, event, eventInstances, model), + _1: {ctor: '[]'} } })); }); @@ -16135,9 +16220,9 @@ var _user$project$Views_EventDetail$eventDetailView = F2( return _elm_lang$core$Native_Utils.eq(e.slug, eventSlug); }, model.events)); - var _p9 = event; - if (_p9.ctor === 'Just') { - var _p10 = _p9._0; + var _p13 = event; + if (_p13.ctor === 'Just') { + var _p14 = _p13._0; return A2( _elm_lang$html$Html$div, { @@ -16147,10 +16232,10 @@ var _user$project$Views_EventDetail$eventDetailView = F2( }, { ctor: '::', - _0: _user$project$Views_EventDetail$eventDetailContent(_p10), + _0: _user$project$Views_EventDetail$eventDetailContent(_p14), _1: { ctor: '::', - _0: A2(_user$project$Views_EventDetail$eventDetailSidebar, _p10, model), + _0: A2(_user$project$Views_EventDetail$eventDetailSidebar, _p14, model), _1: {ctor: '[]'} } });