website/frontend/src/Config/Helpers/Articles/Article.elm

122 lines
3.3 KiB
Elm
Raw Normal View History

2024-12-18 20:11:04 -06:00
module Config.Helpers.Articles.Article exposing (..)
import Config.Data.Identity exposing (pageNames)
import Config.Helpers.Articles.Types exposing (References)
import Config.Helpers.CardFormat exposing (cardMaker)
2024-12-18 20:11:04 -06:00
import Config.Helpers.Format exposing (..)
import Config.Helpers.Headers.Header exposing (headerMaker)
import Config.Helpers.Headers.Types exposing (Header)
import Config.Helpers.Markdown exposing (..)
import Config.Helpers.Response
exposing
( pageList
, topLevelContainer
)
import Config.Helpers.StrengthBar
exposing
( barMaker
, barPadding
)
import Config.Helpers.ToolTip exposing (..)
import Config.Helpers.Viewport exposing (resetViewport)
import Config.Pages.Blog.Types exposing (BlogArticle)
import Config.Pages.Contact.Types exposing (..)
import Config.Pages.Interviews.Types exposing (..)
import Config.Pages.Products.Types exposing (..)
import Config.Style.Colour exposing (colourTheme)
import Config.Style.Transitions
exposing
( hoverFontDarkOrange
, transitionStyleFast
, transitionStyleSlow
)
import Effect exposing (Effect)
import Element as E exposing (..)
import Element.Background as B
import Element.Border as D
import Element.Font as F
import Html
import Html.Attributes as H exposing (style)
import Layouts
import Page exposing (Page)
import Route exposing (Route)
import Shared exposing (..)
import View exposing (View)
articleMaker : Device -> BlogArticle -> Element msg
articleMaker device article =
cardMaker device article.articleName (contentList article) { description = "", src = "String" } article.articleLink
2024-12-18 20:11:04 -06:00
contentList : BlogArticle -> List (Element msg)
contentList article =
[ articleImage article.articleImage
, renderDeviceMarkdown article.articleBody
, case article.hasReferences of
True ->
articleReferences article
False ->
none
]
2024-12-18 20:11:04 -06:00
articleReferences : BlogArticle -> Element msg
articleReferences article =
el
[ width fill
, height fill
]
<|
column [ width fill, F.size 15, spacing 10 ] <|
List.map2 (\x y -> makeReference x y)
article.articleReferences
(List.range 1 (List.length article.articleReferences))
makeReference : References -> Int -> Element msg
makeReference references index =
el
[ F.regular
, F.alignLeft
]
<|
paragraph []
[ newTabLink
[ F.bold
, F.color colourTheme.textLightOrange
, hoverFontDarkOrange
, transitionStyleFast
]
{ url = references.link, label = text (String.fromInt index ++ ". ") }
, text (references.author ++ ", ")
, text (references.title ++ ", ")
, text (references.journal ++ ", ")
, text references.year
]
extractFirstWords : String -> String
extractFirstWords text =
let
words =
text
|> String.split " "
|> List.filter (not << String.isEmpty)
truncatedWords =
List.take 80 words
wasTextTruncated =
List.length words > 80
result =
String.join " " truncatedWords
in
if wasTextTruncated then
result ++ "..."
else
result