61 lines
1.7 KiB
Elm
61 lines
1.7 KiB
Elm
module Views.Article exposing (view, viewTimestamp)
|
|
|
|
{-| Viewing a preview of an individual article, excluding its body.
|
|
-}
|
|
|
|
import Data.Article exposing (Article)
|
|
import Data.UserPhoto as UserPhoto exposing (UserPhoto)
|
|
import Date.Format
|
|
import Html exposing (..)
|
|
import Html.Attributes exposing (attribute, class, classList, href, id, placeholder, src)
|
|
import Route exposing (Route)
|
|
import Views.Article.Favorite as Favorite
|
|
import Views.Author
|
|
|
|
|
|
-- VIEWS --
|
|
|
|
|
|
{-| Some pages want to view just the timestamp, not the whole article.
|
|
-}
|
|
viewTimestamp : Article a -> Html msg
|
|
viewTimestamp article =
|
|
span [ class "date" ] [ text (formattedTimestamp article) ]
|
|
|
|
|
|
view : (Article a -> msg) -> Article a -> Html msg
|
|
view toggleFavorite article =
|
|
let
|
|
author =
|
|
article.author
|
|
in
|
|
div [ class "article-preview" ]
|
|
[ div [ class "article-meta" ]
|
|
[ a [ Route.href (Route.Profile author.username) ]
|
|
[ img [ UserPhoto.src author.image ] [] ]
|
|
, div [ class "info" ]
|
|
[ Views.Author.view author.username
|
|
, span [ class "date" ] [ text (formattedTimestamp article) ]
|
|
]
|
|
, Favorite.button
|
|
toggleFavorite
|
|
article
|
|
[ class "pull-xs-right" ]
|
|
[ text (" " ++ toString article.favoritesCount) ]
|
|
]
|
|
, a [ class "preview-link", Route.href (Route.Article article.slug) ]
|
|
[ h1 [] [ text article.title ]
|
|
, p [] [ text article.description ]
|
|
, span [] [ text "Read more..." ]
|
|
]
|
|
]
|
|
|
|
|
|
|
|
-- INTERNAL --
|
|
|
|
|
|
formattedTimestamp : Article a -> String
|
|
formattedTimestamp article =
|
|
Date.Format.format "%B %e, %Y" article.createdAt
|