{- | Twitter Card metadata, as described at <https://developer.twitter.com/en/docs/twitter-for-websites/cards/guides/getting-started>. This feature should be used alongside "Hakyll.Web.Meta.OpenGraph". The following properties are supported: +-------------------+----------------------------------------------------+ | @twitter:card@ | __Hardcoded__ card type = @"summary"@. | +-------------------+----------------------------------------------------+ | @twitter:creator@ | __Optional__ author's Twitter user name. | | | Taken from @twitter-creator@ context field, if set.| +-------------------+----------------------------------------------------+ | @twitter:site@ | __Optional__ publication's Twitter user name. | | | Taken from @twitter-site@ context field, if set. | +-------------------+----------------------------------------------------+ To use, add 'openGraphField' and 'twitterCardField' to the template context: @ let context = 'defaultContext' <> … postContext = context <> 'openGraphField' "opengraph" context <> 'twitterCardField' "twitter" context @ and update the template: @ \<head> \<title>$title$\</title> \<link rel="stylesheet" type="text\/css" href="\/css\/default.css" /> $if(opengraph)$$opengraph$$endif$ $if(twitter)$$twitter$$endif$ \</head> @ -} module Hakyll.Web.Meta.TwitterCard ( twitterCardField ) where import Hakyll.Core.Compiler import Hakyll.Core.Item import Hakyll.Web.Template import Hakyll.Web.Template.Context twitterCardField :: String -> Context String -> Context String twitterCardField :: String -> Context String -> Context String twitterCardField String k Context String ctx = String -> ([String] -> Item String -> Compiler String) -> Context String forall a. String -> ([String] -> Item a -> Compiler String) -> Context a functionField String k (([String] -> Item String -> Compiler String) -> Context String) -> ([String] -> Item String -> Compiler String) -> Context String forall a b. (a -> b) -> a -> b $ \[String] _args Item String i -> do template <- Compiler Template twitterCardTemplate itemBody <$> applyTemplate template ctx i twitterCardTemplate :: Compiler Template twitterCardTemplate :: Compiler Template twitterCardTemplate = do String -> Compiler (Item String) forall a. a -> Compiler (Item a) makeItem String twitterCardTemplateString Compiler (Item String) -> (Item String -> Compiler Template) -> Compiler Template forall a b. Compiler a -> (a -> Compiler b) -> Compiler b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= Item String -> Compiler Template compileTemplateItem twitterCardTemplateString :: String twitterCardTemplateString :: String twitterCardTemplateString = String "<meta name=\"twitter:card\" content=\"summary\" />\ \$if(twitter-creator)$<meta name=\"twitter:creator\" content=\"$twitter-creator$\" />$endif$\ \$if(twitter-site)$<meta name=\"twitter:site\" content=\"$twitter-site$\" />$endif$"