diff --git a/src/Dom.hs b/src/Dom.hs index b3333f6..5e9ce04 100644 --- a/src/Dom.hs +++ b/src/Dom.hs @@ -10,12 +10,12 @@ import ArticlesList (ArticlesList(..), otherUrl, pageTitle) import Blog (Blog(..), Path(..), Skin(..), Wording(..)) import qualified Blog (get) import Control.Monad.Reader (ReaderT) -import qualified Data.Map as Map (keys) +import qualified Data.Map as Map (keys, lookup) import Data.Monoid ((<>)) import Data.Text (Text, pack, empty) import Lucid import Lucid.Base (makeAttribute) -import Prelude hiding (head) +import Prelude hiding (head, lookup) import Pretty ((.$)) import System.FilePath.Posix ((), (<.>)) @@ -26,15 +26,21 @@ class Page a where content :: a -> HtmlGenerator () instance Page Article where - card (Article {title}) = - makeCard title =<< (Blog.get $name.$("A new article on " <>).$pack) + card (Article {title, metadata}) = do + description <- getDescription (Map.lookup "summary" metadata) + makeCard title (pack description) (Map.lookup "featuredImage" metadata) + where + getDescription = maybe (Blog.get $name.$("A new article on " <>)) return content = article True instance Page ArticlesList where card al = do - blogName <- Blog.get name - makeCard (maybe blogName ((blogName ++ " - ") ++) $ tagged al) =<< pageTitle al + cardTitle <- getTitle <$> Blog.get name + description <- pageTitle al + makeCard cardTitle description Nothing + where + getTitle name = maybe name ((name ++ " - ") ++) $ tagged al content al@(ArticlesList {featured, full}) = do preview <- Article.preview <$> (Blog.get $skin.$previewLinesCount) @@ -58,11 +64,11 @@ article raw (Article {key, body, title}) = do where (aElem, extension) = if raw then (a_, "md") else (navigationA, "html") -makeCard :: String -> Text -> HtmlGenerator () -makeCard title description = do +makeCard :: String -> Text -> Maybe String -> HtmlGenerator () +makeCard title description image = do og "title" $ pack title og "description" description - og "image" =<< (Blog.get $skin.$cardImage.$pack) + og "image" =<< pack <$> maybe (Blog.get $skin.$cardImage) return image og "site_name" =<< (Blog.get $name.$pack) where og attribute value = meta_ [makeAttribute "property" $ "og:" <> attribute , content_ value]