{-# LANGUAGE OverloadedStrings #-}
module Clay.FontFace
( FontFaceFormat (..)
, FontFaceSrc (..)
, fontFaceSrc
) where
import Clay.Common (call)
import Clay.Property (Prefixed (Plain), Value(Value), Val (value), quote)
import Clay.Stylesheet (Css, key)
import Data.Monoid ((<>))
import Data.Functor ((<$>))
import Data.Maybe (fromMaybe)
import Data.Text (Text)
data FontFaceFormat
= WOFF
| WOFF2
| TrueType
| OpenType
| EmbeddedOpenType
| SVG
deriving Show
formatName :: FontFaceFormat -> Text
formatName format = case format of
WOFF -> "woff"
WOFF2 -> "woff2"
TrueType -> "truetype"
OpenType -> "opentype"
EmbeddedOpenType -> "embedded-opentype"
SVG -> "svg"
data FontFaceSrc
= FontFaceSrcUrl Text (Maybe FontFaceFormat)
| FontFaceSrcLocal Text
deriving Show
instance Val FontFaceSrc where
value src = Value $ Plain $ case src of
FontFaceSrcLocal name -> call "local" (quote name)
FontFaceSrcUrl url mformat ->
call "url" (quote url)
<> fromMaybe "" (call "format" . quote . formatName <$> mformat)
fontFaceSrc :: [FontFaceSrc] -> Css
fontFaceSrc = key "src"