module Interviews.Helpers exposing (..) import Config.CardFormat exposing (..) import Config.Colour exposing (..) import Config.Format exposing (..) import Config.StrengthBar exposing (..) import Config.ToolTip exposing (..) import Cuckery.Types exposing (..) import Effect exposing (Effect) import Element as E exposing (..) import Element.Background as B exposing (..) import Element.Border as D import Element.Font as F import Html.Attributes as H exposing (style) import Interviews.Types exposing (..) import Layouts import Page exposing (Page) import Route exposing (Route) import Shared import View exposing (View) interviewMaker : Interview -> Element msg interviewMaker interview = row topLevelBox [ cardImageMaker (interviewImage interview) , cardMaker [ cardTitleMaker (interviewTitle interview) , cardFormatter [ cardContentSpacing [ column [ fieldSpacer , width fill ] [ socialMaker interview , appearanceTitle interview , appearanceMaker interview ] ] ] ] ] interviewImage : Interview -> { src : String, description : String } interviewImage interview = { src = "interviews/" ++ interview.interviewImage ++ ".png" , description = interview.interviewImage } interviewTitle : Interview -> String interviewTitle interview = interview.interviewName socialMaker : Interview -> Element msg socialMaker interview = row (paragraphBoldFormat ++ [ F.size 18 , spacing 5 ] ) [ text "Social:" , paragraphLinkFormat { url = interview.interviewSocial , label = transitionHighlightedLinkHover <| text (formatInterviewSocial interview.interviewSocial) } ] appearanceTitle : Interview -> Element msg appearanceTitle interview = row (paragraphBoldFormat ++ [ F.size 18 ] ) [ text "Appearances:" ] appearanceMaker : Interview -> Element msg appearanceMaker interview = column [ spacing 15, width fill ] <| List.map2 (\x y -> makeAppearance x y) interview.interviewAppearances (List.range 1 (List.length interview.interviewAppearances)) makeAppearance : Appearance -> Int -> Element msg makeAppearance appearanceEntry index = column (paragraphAlignLeft ++ [ spacing 8 , width fill ] ) [ row (paragraphFormat ++ [ F.size 18 , E.width fill , paddingEach { top = 0 , bottom = 0 , left = 35 , right = 0 } ] ) [ column (paragraphFormat ++ [ F.size 18 , alignTop , alignRight , F.alignRight ] ) [ text (String.fromInt index ++ ". ") ] , column [ spacing 8 , width fill ] [ episodeMaker appearanceEntry , experienceMaker appearanceEntry , dateMaker appearanceEntry , subjectMaker appearanceEntry , subjectList appearanceEntry ] ] ] episodeMaker : Appearance -> Element msg episodeMaker appearanceEntry = paragraphLinkFormat { url = appearanceEntry.appearanceLink , label = row [ F.size 18 ] [ text ("#" ++ appearanceEntry.appearanceEpisode ++ ": " ++ appearanceEntry.appearanceTitle) |> el [ F.color colourTheme.textLightOrange , mouseOver [ F.color colourTheme.textDarkOrange ] , transitionStyle ] ] } experienceMaker : Appearance -> Element msg experienceMaker appearanceEntry = row [ width fill , height fill ] [ column [ E.alignTop , E.alignLeft ] [ paragraph (paragraphBoldFormat ++ [ F.size 18, E.width <| px 112 ]) [ el [ tooltip "This represents how pleasant it was to interact with the host(s)." ] (text "Pleasantness:") ] ] , column [ E.width fill , E.alignLeft , centerY , height fill ] [ barMaker getExperienceTooltip appearanceEntry.appearanceExperience ] ] getExperienceTooltip : Int -> String getExperienceTooltip num = case num of 0 -> "Nightmare. Deliberately malicious." 1 -> "Toxic. Utter fucking twat(s)." 2 -> "Hostile. Consistently disruptive." 3 -> "Belligerent. Consistently disrespectful." 4 -> "Uncivil. Frequently dismissive." 5 -> "Neutral. Unremarkable social interaction." 6 -> "Civil. Slightly considerate." 7 -> "Pleasant. Genuinely respectful." 8 -> "Very kind. Consistently supportive." 9 -> "Compassionate. Went out of their way." 10 -> "Absolute angel. Perfectly empathetic." _ -> "Behavior level out of expected range." dateMaker : Appearance -> Element msg dateMaker appearanceEntry = row paragraphBoldFormat [ column [ alignTop ] [ text "Published:" ] , column [ alignTop , width fill ] [ paragraph [ F.regular , paddingEach { top = 0 , right = 0 , bottom = 0 , left = 3 } ] [ text appearanceEntry.appearanceYear ] ] ] subjectMaker : Appearance -> Element msg subjectMaker appearanceEntry = row paragraphBoldFormat [ column [ alignTop ] [ text "Subjects:" ] ] subjectList : Appearance -> Element msg subjectList appearanceEntry = column [ spacing 8 , width fill , paddingEach { top = 0 , right = 0 , bottom = 0 , left = 25 } ] <| List.map2 (\x y -> makeSubject x) appearanceEntry.appearanceSubjects (List.range 1 (List.length appearanceEntry.appearanceSubjects)) makeSubject : Subjects -> Element msg makeSubject subjects = column [ E.width fill , alignLeft , paddingEach { top = 0 , right = 0 , bottom = 0 , left = 8 } ] [ paragraph [ F.regular ] [ text ("‣ " ++ subjects.subject) ] ]