File: TwitterCard.hs

package info (click to toggle)
haskell-hakyll 4.16.2.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 928 kB
  • sloc: haskell: 6,504; xml: 44; makefile: 9
file content (63 lines) | stat: -rw-r--r-- 2,189 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{- |

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 k ctx = functionField k $ \_args i -> do
  template <- twitterCardTemplate
  itemBody <$> applyTemplate template ctx i

twitterCardTemplate :: Compiler Template
twitterCardTemplate = do
  makeItem twitterCardTemplateString >>= compileTemplateItem

twitterCardTemplateString :: String
twitterCardTemplateString =
  "<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$"