feat: added interviews
|
@ -76,7 +76,15 @@ makeDodge dodgeEntry index =
|
||||||
displayFallacy fallacyText =
|
displayFallacy fallacyText =
|
||||||
row paragraphBoldFormat
|
row paragraphBoldFormat
|
||||||
[ column [ alignTop, width (px 165) ]
|
[ column [ alignTop, width (px 165) ]
|
||||||
[ text "Fallacy:" |> el [ paddingEach { top = 0, right = 0, bottom = 0, left = 70 } ]
|
[ text "Fallacy:"
|
||||||
|
|> el
|
||||||
|
[ paddingEach
|
||||||
|
{ top = 0
|
||||||
|
, right = 0
|
||||||
|
, bottom = 0
|
||||||
|
, left = 70
|
||||||
|
}
|
||||||
|
]
|
||||||
]
|
]
|
||||||
, column [ E.width fill, alignLeft ]
|
, column [ E.width fill, alignLeft ]
|
||||||
[ paragraph [ F.regular ]
|
[ paragraph [ F.regular ]
|
||||||
|
@ -84,11 +92,21 @@ makeDodge dodgeEntry index =
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
in
|
in
|
||||||
column (paragraphAlignLeft ++ [ spacing 3, width fill ])
|
column
|
||||||
|
(paragraphAlignLeft
|
||||||
|
++ [ spacing 3
|
||||||
|
, width fill
|
||||||
|
]
|
||||||
|
)
|
||||||
[ row
|
[ row
|
||||||
(paragraphFormat
|
(paragraphFormat
|
||||||
++ [ F.size 18
|
++ [ F.size 18
|
||||||
, paddingEach { top = 0, bottom = 0, left = 15, right = 15 }
|
, paddingEach
|
||||||
|
{ top = 0
|
||||||
|
, bottom = 0
|
||||||
|
, left = 15
|
||||||
|
, right = 15
|
||||||
|
}
|
||||||
, E.width fill
|
, E.width fill
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
@ -213,31 +231,24 @@ cuckMaker cuck =
|
||||||
, E.height <| px 115
|
, E.height <| px 115
|
||||||
, alignTop
|
, alignTop
|
||||||
, alignRight
|
, alignRight
|
||||||
|
|
||||||
-- , explain Debug.todo
|
|
||||||
]
|
]
|
||||||
[ E.image
|
[ column
|
||||||
[ alignRight
|
[ D.rounded 100
|
||||||
, alignTop
|
, D.width 5
|
||||||
, D.rounded 100
|
, D.color colourTheme.cardBackground
|
||||||
, clip
|
]
|
||||||
, E.width <| px 90
|
[ E.image
|
||||||
, E.height <| px 90
|
[ alignRight
|
||||||
|
, alignTop
|
||||||
|
, D.rounded 100
|
||||||
|
, clip
|
||||||
|
, E.width <| px 90
|
||||||
|
, E.height <| px 90
|
||||||
|
]
|
||||||
|
{ src = "cucks/" ++ cuck.cuckImage ++ "/" ++ cuck.cuckImage ++ ".png"
|
||||||
|
, description = cuck.cuckName
|
||||||
|
}
|
||||||
]
|
]
|
||||||
{ src = "cucks/" ++ cuck.cuckImage ++ "/" ++ cuck.cuckImage ++ ".png"
|
|
||||||
, description = cuck.cuckName
|
|
||||||
}
|
|
||||||
-- , E.image
|
|
||||||
-- [ D.rounded 100
|
|
||||||
-- , clip
|
|
||||||
-- , moveUp 107
|
|
||||||
-- , moveRight 7
|
|
||||||
-- , E.width <| px 125
|
|
||||||
-- , E.height <| px 125
|
|
||||||
-- ]
|
|
||||||
-- { src = "cucks/clownborder.png"
|
|
||||||
-- , description = cuck.cuckName
|
|
||||||
-- }
|
|
||||||
]
|
]
|
||||||
, column
|
, column
|
||||||
[ E.width <| px 600 ]
|
[ E.width <| px 600 ]
|
||||||
|
|
29
frontend/src/Interviews/Episodes/FitAndFurious.elm
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
module Interviews.Episodes.FitAndFurious exposing (..)
|
||||||
|
|
||||||
|
import Interviews.Types exposing (..)
|
||||||
|
|
||||||
|
|
||||||
|
fitAndFurious : Interview
|
||||||
|
fitAndFurious =
|
||||||
|
let
|
||||||
|
name : String
|
||||||
|
name =
|
||||||
|
"Fit and Furious"
|
||||||
|
in
|
||||||
|
{ interviewName = name
|
||||||
|
, interviewImage = formatInterviewName name
|
||||||
|
, interviewSocial = "https://x.com/FitAndFuriousND"
|
||||||
|
, interviewAppearances =
|
||||||
|
[ { appearanceTitle = "Seed Oil Schooling!"
|
||||||
|
, appearanceEpisode = "51"
|
||||||
|
, appearanceLink = "https://www.youtube.com/watch?v=7I1IJSZIGm0"
|
||||||
|
, appearanceExperience = 7
|
||||||
|
, appearanceSubjects =
|
||||||
|
[ { subject = "The story behind the Nutri-Dex." }
|
||||||
|
, { subject = "Seed oil consumption and health." }
|
||||||
|
, { subject = "Natural diets versus artificial diets." }
|
||||||
|
, { subject = "Ethical veganism and Nick's diet." }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
42
frontend/src/Interviews/Episodes/FoolproofMastery.elm
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
module Interviews.Episodes.FoolproofMastery exposing (..)
|
||||||
|
|
||||||
|
import Interviews.Types exposing (..)
|
||||||
|
|
||||||
|
|
||||||
|
foolproofMastery : Interview
|
||||||
|
foolproofMastery =
|
||||||
|
let
|
||||||
|
name : String
|
||||||
|
name =
|
||||||
|
"Foolproof Mastery"
|
||||||
|
in
|
||||||
|
{ interviewName = name
|
||||||
|
, interviewImage = formatInterviewName name
|
||||||
|
, interviewSocial = "https://x.com/FoolproofMaster"
|
||||||
|
, interviewAppearances =
|
||||||
|
[ { appearanceTitle = "Seed Oils & Statistics"
|
||||||
|
, appearanceEpisode = "14"
|
||||||
|
, appearanceLink = "https://www.youtube.com/watch?v=3w0wvckA1Hw"
|
||||||
|
, appearanceExperience = 10
|
||||||
|
, appearanceSubjects =
|
||||||
|
[ { subject = "Vegetable oils & health outcomes." }
|
||||||
|
, { subject = "Lipid peroxidation." }
|
||||||
|
, { subject = "Lag time to LDL oxidation." }
|
||||||
|
, { subject = "Statistical analysis." }
|
||||||
|
, { subject = "Study design" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
, { appearanceTitle = "Bizarre Nutrition Claims"
|
||||||
|
, appearanceEpisode = "15"
|
||||||
|
, appearanceLink = "https://www.youtube.com/watch?v=9k7COJgwCo4"
|
||||||
|
, appearanceExperience = 10
|
||||||
|
, appearanceSubjects =
|
||||||
|
[ { subject = "Meat eating in Hong Kong." }
|
||||||
|
, { subject = "Different eating patterns." }
|
||||||
|
, { subject = "Glycine methionine ratio." }
|
||||||
|
, { subject = "Oysters as a vegan food." }
|
||||||
|
, { subject = "Nick's supplements." }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
31
frontend/src/Interviews/Episodes/KetogeeksPodcast.elm
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
module Interviews.Episodes.KetogeeksPodcast exposing (..)
|
||||||
|
|
||||||
|
import Interviews.Types exposing (..)
|
||||||
|
|
||||||
|
|
||||||
|
ketoGeeksPodcast : Interview
|
||||||
|
ketoGeeksPodcast =
|
||||||
|
let
|
||||||
|
name : String
|
||||||
|
name =
|
||||||
|
"Ketogeek's Podcast"
|
||||||
|
in
|
||||||
|
{ interviewName = name
|
||||||
|
, interviewImage = formatInterviewName name
|
||||||
|
, interviewSocial = "https://x.com/fmahmad88"
|
||||||
|
, interviewAppearances =
|
||||||
|
[ { appearanceTitle = "In Defense of Seed Oils and Polyunsaturated Fats"
|
||||||
|
, appearanceEpisode = "78"
|
||||||
|
, appearanceLink = "https://ketogeek.libsyn.com/in-defense-of-seed-oils-and-polyunsaturated-fats-nick-hiebert"
|
||||||
|
, appearanceExperience = 10
|
||||||
|
, appearanceSubjects =
|
||||||
|
[ { subject = "How did you start getting into the seed oil debate?" }
|
||||||
|
, { subject = "What are some common claims made against seed oils?" }
|
||||||
|
, { subject = "Does PUFA cause chronic diseases like CVD and cancer?" }
|
||||||
|
, { subject = "Critique of the ancestral approach towards food and nutrition." }
|
||||||
|
, { subject = "Why and when epidemiology can be good evidence." }
|
||||||
|
, { subject = "Resources people can read regarding PUFA and health." }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
32
frontend/src/Interviews/Episodes/LegendaryLifePodcast.elm
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
module Interviews.Episodes.LegendaryLifePodcast exposing (..)
|
||||||
|
|
||||||
|
import Interviews.Types exposing (..)
|
||||||
|
|
||||||
|
|
||||||
|
legendaryLifePodcast : Interview
|
||||||
|
legendaryLifePodcast =
|
||||||
|
let
|
||||||
|
name : String
|
||||||
|
name =
|
||||||
|
"Legendary Life Podcast"
|
||||||
|
in
|
||||||
|
{ interviewName = name
|
||||||
|
, interviewImage = formatInterviewName name
|
||||||
|
, interviewSocial = "https://x.com/ted_ryce"
|
||||||
|
, interviewAppearances =
|
||||||
|
[ { appearanceTitle = "Common Food And Nutrition Myths Debunked"
|
||||||
|
, appearanceEpisode = "391"
|
||||||
|
, appearanceLink = "https://www.legendarylifepodcast.com/391-5-common-food-and-nutrition-myths-debunked-with-nick-hiebert/c"
|
||||||
|
, appearanceExperience = 10
|
||||||
|
, appearanceSubjects =
|
||||||
|
[ { subject = "The importance of identifying quality evidence." }
|
||||||
|
, { subject = "Salt doesn’t cost high blood pressure?" }
|
||||||
|
, { subject = "Foods that are high in potassium." }
|
||||||
|
, { subject = "Why eating processed foods might make you fat." }
|
||||||
|
, { subject = "Western Diet Culture Mentality." }
|
||||||
|
, { subject = "Are there good foods and bad foods." }
|
||||||
|
, { subject = "Nutrient Density: Guide and Tools." }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
31
frontend/src/Interviews/Episodes/MarkBellsPowerProject.elm
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
module Interviews.Episodes.MarkBellsPowerProject exposing (..)
|
||||||
|
|
||||||
|
import Interviews.Types exposing (..)
|
||||||
|
|
||||||
|
|
||||||
|
markBellsPowerProject : Interview
|
||||||
|
markBellsPowerProject =
|
||||||
|
let
|
||||||
|
name : String
|
||||||
|
name =
|
||||||
|
"Mark Bell's Power Project"
|
||||||
|
in
|
||||||
|
{ interviewName = name
|
||||||
|
, interviewImage = formatInterviewName name
|
||||||
|
, interviewSocial = "https://x.com/MarkSmellyBell"
|
||||||
|
, interviewAppearances =
|
||||||
|
[ { appearanceTitle = "Seed Oils Aren’t as Bad as You May Think"
|
||||||
|
, appearanceEpisode = "670"
|
||||||
|
, appearanceLink = "https://www.youtube.com/watch?v=omzCi2CGoxo"
|
||||||
|
, appearanceExperience = 1
|
||||||
|
, appearanceSubjects =
|
||||||
|
[ { subject = "Quick background on seed oils." }
|
||||||
|
, { subject = "How does red meat increase disease risk?" }
|
||||||
|
, { subject = "Exact health benefits of vegetable oils." }
|
||||||
|
, { subject = "Tucker Goodrich & Alan Flanagan debate review." }
|
||||||
|
, { subject = "Should you remove seed oils all together at once?" }
|
||||||
|
, { subject = "Maybe vegetable oils aren’t that important?" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
43
frontend/src/Interviews/Episodes/MuscleMemoirsPodcast.elm
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
module Interviews.Episodes.MuscleMemoirsPodcast exposing (..)
|
||||||
|
|
||||||
|
import Interviews.Types exposing (..)
|
||||||
|
|
||||||
|
|
||||||
|
muscleMemoirsPodcast : Interview
|
||||||
|
muscleMemoirsPodcast =
|
||||||
|
let
|
||||||
|
name : String
|
||||||
|
name =
|
||||||
|
"Muscle Memoirs Podcast"
|
||||||
|
in
|
||||||
|
{ interviewName = name
|
||||||
|
, interviewImage = formatInterviewName name
|
||||||
|
, interviewSocial = "https://x.com/MikeMurrayRD"
|
||||||
|
, interviewAppearances =
|
||||||
|
[ { appearanceTitle = "The Nutri-Dex, Misconceptions, and Optimizing Body Composition"
|
||||||
|
, appearanceEpisode = "11"
|
||||||
|
, appearanceLink = "https://www.youtube.com/watch?v=SF1BBOA5FAQ"
|
||||||
|
, appearanceExperience = 10
|
||||||
|
, appearanceSubjects =
|
||||||
|
[ { subject = "The story behind the Nutri-Dex." }
|
||||||
|
, { subject = "Misconceptions about nutrient density." }
|
||||||
|
, { subject = "Using the cheat sheet to optimize body composition." }
|
||||||
|
, { subject = "Top foods that are beneficial for bodybuilding." }
|
||||||
|
, { subject = "How are the most satiating foods determined?" }
|
||||||
|
, { subject = "Nick gives some of his tops foods" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
, { appearanceTitle = "Seed Oils, Saturated Fat, and Cardiovascular Disease"
|
||||||
|
, appearanceEpisode = "82"
|
||||||
|
, appearanceLink = "https://www.youtube.com/watch?v=WfApzH4Dj3M"
|
||||||
|
, appearanceExperience = 10
|
||||||
|
, appearanceSubjects =
|
||||||
|
[ { subject = "Mechanistic arguments against seed oils." }
|
||||||
|
, { subject = "Linoleic acid consumption and heart disease." }
|
||||||
|
, { subject = "Are hunter-gatherer diets optimal for modern humans?" }
|
||||||
|
, { subject = "Saturated fat and blood lipids." }
|
||||||
|
, { subject = "Meta-analysis in nutrition." }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
32
frontend/src/Interviews/Episodes/SigmaNutritionRadio.elm
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
module Interviews.Episodes.SigmaNutritionRadio exposing (..)
|
||||||
|
|
||||||
|
import Interviews.Types exposing (..)
|
||||||
|
|
||||||
|
|
||||||
|
sigmaNutritionRadio : Interview
|
||||||
|
sigmaNutritionRadio =
|
||||||
|
let
|
||||||
|
name : String
|
||||||
|
name =
|
||||||
|
"Sigma Nutrition Radio"
|
||||||
|
in
|
||||||
|
{ interviewName = name
|
||||||
|
, interviewImage = formatInterviewName name
|
||||||
|
, interviewSocial = "https://x.com/NutritionDanny"
|
||||||
|
, interviewAppearances =
|
||||||
|
[ { appearanceTitle = "Micronutrients, Anti-nutrients, and Non-essential Nutrients"
|
||||||
|
, appearanceEpisode = "360"
|
||||||
|
, appearanceLink = "https://sigmanutrition.com/episode360/"
|
||||||
|
, appearanceExperience = 1
|
||||||
|
, appearanceSubjects =
|
||||||
|
[ { subject = "How best to measure nutrient density." }
|
||||||
|
, { subject = "The downsides of maximizing nutrient density." }
|
||||||
|
, { subject = "Anti-nutrients: how relevant are they?" }
|
||||||
|
, { subject = "Understanding the effect of phytate, oxalate, etc." }
|
||||||
|
, { subject = "Hard to get nutrients in typical diets." }
|
||||||
|
, { subject = "Synergistic and moderating effects of nutrients." }
|
||||||
|
, { subject = "Non-essential nutrients & importance for health." }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
217
frontend/src/Interviews/Helpers.elm
Normal file
|
@ -0,0 +1,217 @@
|
||||||
|
module Interviews.Helpers exposing (..)
|
||||||
|
|
||||||
|
import Config.Colour exposing (..)
|
||||||
|
import Config.Format 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)
|
||||||
|
|
||||||
|
|
||||||
|
makeSubject : Subjects -> Element msg
|
||||||
|
makeSubject subjects =
|
||||||
|
column [ E.width fill, alignLeft ]
|
||||||
|
[ paragraph [ F.regular ]
|
||||||
|
[ text ("‣ " ++ subjects.subject) ]
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
makeAppearance : Appearance -> Int -> Element msg
|
||||||
|
makeAppearance appearanceEntry index =
|
||||||
|
column
|
||||||
|
(paragraphAlignLeft
|
||||||
|
++ [ spacing 3
|
||||||
|
, width fill
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ row
|
||||||
|
(paragraphFormat
|
||||||
|
++ [ F.size 18
|
||||||
|
, paddingEach
|
||||||
|
{ top = 0
|
||||||
|
, bottom = 0
|
||||||
|
, left = 15
|
||||||
|
, right = 15
|
||||||
|
}
|
||||||
|
, E.width fill
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ text " "
|
||||||
|
, text (String.fromInt index ++ ". ")
|
||||||
|
, paragraphLinkFormat
|
||||||
|
{ url = appearanceEntry.appearanceLink
|
||||||
|
, label =
|
||||||
|
row
|
||||||
|
[ F.size 18
|
||||||
|
]
|
||||||
|
[ text ("#"++appearanceEntry.appearanceEpisode++": "++appearanceEntry.appearanceTitle)
|
||||||
|
|> el
|
||||||
|
[ F.color colourTheme.highlightText
|
||||||
|
, mouseOver [ F.color colourTheme.highlightTextHover ]
|
||||||
|
, transitionStyle
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
, row paragraphBoldFormat
|
||||||
|
[ column [ alignTop, width <| px 125 ]
|
||||||
|
[ text "Subjects:"
|
||||||
|
|> el
|
||||||
|
[ paddingEach
|
||||||
|
{ top = 0
|
||||||
|
, right = 0
|
||||||
|
, bottom = 0
|
||||||
|
, left = 55
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, column
|
||||||
|
[ spacing 8
|
||||||
|
, width fill
|
||||||
|
]
|
||||||
|
<|
|
||||||
|
List.map2 (\x y -> makeSubject x)
|
||||||
|
appearanceEntry.appearanceSubjects
|
||||||
|
(List.range 1 (List.length appearanceEntry.appearanceSubjects))
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
interviewMaker : Interview -> Element msg
|
||||||
|
interviewMaker interview =
|
||||||
|
row
|
||||||
|
[ spacing 20
|
||||||
|
, width fill
|
||||||
|
, E.height fill
|
||||||
|
, alignTop
|
||||||
|
, alignRight
|
||||||
|
]
|
||||||
|
[ column
|
||||||
|
[ E.width <| px 115
|
||||||
|
, E.height <| px 115
|
||||||
|
, alignTop
|
||||||
|
, alignRight
|
||||||
|
]
|
||||||
|
[ column
|
||||||
|
[ D.rounded 100
|
||||||
|
, D.width 5
|
||||||
|
, D.color colourTheme.cardBackground
|
||||||
|
]
|
||||||
|
[ E.image
|
||||||
|
[ alignRight
|
||||||
|
, alignTop
|
||||||
|
, D.rounded 100
|
||||||
|
, clip
|
||||||
|
, E.width <| px 90
|
||||||
|
, E.height <| px 90
|
||||||
|
]
|
||||||
|
{ src = "interviews/" ++ interview.interviewImage ++ ".png"
|
||||||
|
, description = interview.interviewImage
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, column
|
||||||
|
[ E.width <| px 600 ]
|
||||||
|
[ row
|
||||||
|
(nonHighlightedTitleFormat
|
||||||
|
++ [ F.size 20
|
||||||
|
, paddingEach
|
||||||
|
{ top = 6
|
||||||
|
, bottom = 3
|
||||||
|
, left = 25
|
||||||
|
, right = 15
|
||||||
|
}
|
||||||
|
, alignBottom
|
||||||
|
, width fill
|
||||||
|
, D.roundEach
|
||||||
|
{ topLeft = 26
|
||||||
|
, topRight = 15
|
||||||
|
, bottomRight = 0
|
||||||
|
, bottomLeft = 0
|
||||||
|
}
|
||||||
|
, B.gradient
|
||||||
|
{ angle = 1.5708
|
||||||
|
, steps =
|
||||||
|
[ colourTheme.highlightTextHover
|
||||||
|
, colourTheme.highlightTextHover
|
||||||
|
, colourTheme.transparent
|
||||||
|
, colourTheme.transparent
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ text interview.interviewName ]
|
||||||
|
, column
|
||||||
|
[ E.height fill
|
||||||
|
, E.width fill
|
||||||
|
|
||||||
|
-- , B.color colourTheme.cardBackground
|
||||||
|
, paddingEach
|
||||||
|
{ top = 10
|
||||||
|
, bottom = 10
|
||||||
|
, left = 10
|
||||||
|
, right = 10
|
||||||
|
}
|
||||||
|
, D.roundEach
|
||||||
|
{ topLeft = 0
|
||||||
|
, topRight = 0
|
||||||
|
, bottomRight = 0
|
||||||
|
, bottomLeft = 26
|
||||||
|
}
|
||||||
|
, spacing 3
|
||||||
|
, B.gradient
|
||||||
|
{ angle = 1.5708
|
||||||
|
, steps =
|
||||||
|
[ colourTheme.cardBackground
|
||||||
|
, colourTheme.cardBackground
|
||||||
|
, colourTheme.transparent
|
||||||
|
, colourTheme.transparent
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
[ row
|
||||||
|
(paragraphBoldFormat
|
||||||
|
++ [ F.size 18
|
||||||
|
, paddingEach
|
||||||
|
{ top = 0
|
||||||
|
, bottom = 0
|
||||||
|
, left = 15
|
||||||
|
, right = 15
|
||||||
|
}
|
||||||
|
, spacing 5
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ text "Social:"
|
||||||
|
, paragraphLinkFormat
|
||||||
|
{ url = interview.interviewSocial
|
||||||
|
, label = transitionHighlightedLinkHover <| text (formatInterviewSocial interview.interviewSocial)
|
||||||
|
}
|
||||||
|
]
|
||||||
|
, row
|
||||||
|
(paragraphBoldFormat
|
||||||
|
++ [ F.size 18
|
||||||
|
, paddingEach
|
||||||
|
{ top = 0
|
||||||
|
, bottom = 0
|
||||||
|
, left = 15
|
||||||
|
, right = 15
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ text "Appearances:" ]
|
||||||
|
, column [ spacing 8, width fill ] <|
|
||||||
|
List.map2 (\x y -> makeAppearance x y)
|
||||||
|
interview.interviewAppearances
|
||||||
|
(List.range 1 (List.length interview.interviewAppearances))
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
44
frontend/src/Interviews/Types.elm
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
module Interviews.Types exposing (..)
|
||||||
|
|
||||||
|
|
||||||
|
type alias Interview =
|
||||||
|
{ interviewName : String
|
||||||
|
, interviewImage : String
|
||||||
|
, interviewSocial : String
|
||||||
|
, interviewAppearances : List Appearance
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type alias Appearance =
|
||||||
|
{ appearanceEpisode : String
|
||||||
|
, appearanceLink : String
|
||||||
|
, appearanceTitle : String
|
||||||
|
, appearanceExperience : Int
|
||||||
|
, appearanceSubjects : List Subjects
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type alias Subjects =
|
||||||
|
{ subject : String }
|
||||||
|
|
||||||
|
|
||||||
|
type alias FormattedInterviewName =
|
||||||
|
String
|
||||||
|
|
||||||
|
|
||||||
|
type alias FormattedInterviewSocial =
|
||||||
|
String
|
||||||
|
|
||||||
|
|
||||||
|
formatInterviewName : String -> FormattedInterviewName
|
||||||
|
formatInterviewName name =
|
||||||
|
name
|
||||||
|
|> String.toLower
|
||||||
|
|> String.replace " " ""
|
||||||
|
|> String.replace "'" ""
|
||||||
|
|
||||||
|
|
||||||
|
formatInterviewSocial : String -> FormattedInterviewSocial
|
||||||
|
formatInterviewSocial name =
|
||||||
|
name
|
||||||
|
|> String.replace "https://x.com/" "@"
|
|
@ -155,7 +155,8 @@ view { toContentMsg, model, content } =
|
||||||
, hyperbolgButton
|
, hyperbolgButton
|
||||||
, argumentsButton
|
, argumentsButton
|
||||||
, cucklistButton
|
, cucklistButton
|
||||||
, communityButton
|
|
||||||
|
-- , communityButton
|
||||||
, nutridexButton
|
, nutridexButton
|
||||||
, donateButton
|
, donateButton
|
||||||
, interviewButton
|
, interviewButton
|
||||||
|
|
114
frontend/src/Pages/Interviews.elm
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
module Pages.Interviews exposing (Model, Msg, page)
|
||||||
|
|
||||||
|
import Config.Colour as T exposing (..)
|
||||||
|
import Config.Format as O exposing (..)
|
||||||
|
import Config.Identity as I exposing (..)
|
||||||
|
import Effect exposing (Effect)
|
||||||
|
import Element exposing (..)
|
||||||
|
import Element.Border as D
|
||||||
|
import Element.Font as F
|
||||||
|
import Html
|
||||||
|
import Html.Attributes as H exposing (style)
|
||||||
|
import Interviews.Episodes.FitAndFurious exposing (fitAndFurious)
|
||||||
|
import Interviews.Episodes.FoolproofMastery exposing (foolproofMastery)
|
||||||
|
import Interviews.Episodes.KetogeeksPodcast exposing (ketoGeeksPodcast)
|
||||||
|
import Interviews.Episodes.LegendaryLifePodcast exposing (legendaryLifePodcast)
|
||||||
|
import Interviews.Episodes.MarkBellsPowerProject exposing (markBellsPowerProject)
|
||||||
|
import Interviews.Episodes.MuscleMemoirsPodcast exposing (muscleMemoirsPodcast)
|
||||||
|
import Interviews.Episodes.SigmaNutritionRadio exposing (sigmaNutritionRadio)
|
||||||
|
import Interviews.Helpers exposing (..)
|
||||||
|
import Layouts
|
||||||
|
import Page exposing (Page)
|
||||||
|
import Route exposing (Route)
|
||||||
|
import Shared
|
||||||
|
import View exposing (View)
|
||||||
|
|
||||||
|
|
||||||
|
page : Shared.Model -> Route () -> Page Model Msg
|
||||||
|
page shared route =
|
||||||
|
Page.new
|
||||||
|
{ init = init
|
||||||
|
, update = update
|
||||||
|
, subscriptions = subscriptions
|
||||||
|
, view = view
|
||||||
|
}
|
||||||
|
|> Page.withLayout toLayout
|
||||||
|
|
||||||
|
|
||||||
|
toLayout : Model -> Layouts.Layout Msg
|
||||||
|
toLayout model =
|
||||||
|
Layouts.Navbar {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- INIT
|
||||||
|
|
||||||
|
|
||||||
|
type alias Model =
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
init : () -> ( Model, Effect Msg )
|
||||||
|
init () =
|
||||||
|
( {}
|
||||||
|
, Effect.none
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- UPDATE
|
||||||
|
|
||||||
|
|
||||||
|
type Msg
|
||||||
|
= NoOp
|
||||||
|
|
||||||
|
|
||||||
|
update : Msg -> Model -> ( Model, Effect Msg )
|
||||||
|
update msg model =
|
||||||
|
case msg of
|
||||||
|
NoOp ->
|
||||||
|
( model
|
||||||
|
, Effect.none
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- SUBSCRIPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
subscriptions : Model -> Sub Msg
|
||||||
|
subscriptions model =
|
||||||
|
Sub.none
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- VIEW
|
||||||
|
|
||||||
|
|
||||||
|
view : Model -> View Msg
|
||||||
|
view model =
|
||||||
|
{ title = dodgersName
|
||||||
|
, attributes = []
|
||||||
|
, element = interviewContainer
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
interviewContainer : Element msg
|
||||||
|
interviewContainer =
|
||||||
|
topLevelContainer interviewList
|
||||||
|
|
||||||
|
|
||||||
|
interviewList : Element msg
|
||||||
|
interviewList =
|
||||||
|
column
|
||||||
|
pageList
|
||||||
|
<|
|
||||||
|
List.map interviewMaker
|
||||||
|
[ sigmaNutritionRadio
|
||||||
|
, markBellsPowerProject
|
||||||
|
, foolproofMastery
|
||||||
|
, ketoGeeksPodcast
|
||||||
|
, legendaryLifePodcast
|
||||||
|
, muscleMemoirsPodcast
|
||||||
|
, fitAndFurious
|
||||||
|
]
|
BIN
frontend/static/interviews/fitandfurious.png
Normal file
After Width: | Height: | Size: 83 KiB |
BIN
frontend/static/interviews/foolproofmastery.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
frontend/static/interviews/ketogeekspodcast.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
frontend/static/interviews/legendarylifepodcast.png
Normal file
After Width: | Height: | Size: 269 KiB |
BIN
frontend/static/interviews/markbellspowerproject.png
Normal file
After Width: | Height: | Size: 122 KiB |
BIN
frontend/static/interviews/musclememoirspodcast.png
Normal file
After Width: | Height: | Size: 318 KiB |
BIN
frontend/static/interviews/sigmanutritionradio.png
Normal file
After Width: | Height: | Size: 19 KiB |